T.Tさんへのお返事です。
> このプログラムの骨格を変えずに十進BASICで書き換えるとどうなるのでしょうか。
Q&Aのコーナー
CやJavaで書かれた数値計算アルゴリズムの移植
を参考に、書き換えてみました。
これより、機械的に置き換えるパターンが見えてきます。手ごろな例題だと思います。
!「knight.c - 騎士巡歴の問題」の移植
LET N=5 !盤の大きさ
DIM board(0 TO N+3,0 TO N+3) !盤面
DIM dx(0 TO 7) !横変位
DATA 2, 1,-1,-2,-2,-1, 1, 2
MAT READ dx
DIM dy(0 TO 7) !縦変位
DATA 1, 2, 2, 1,-1,-2,-2,-1
MAT READ dy
LET solution=0 !解答数
SUB printboard !盤面を出力
local i,j
LET solution=solution+1
PRINT "解"; solution
FOR i=2 TO N+1
FOR j=2 TO N+1
PRINT USING "####": board(i,j);
NEXT j
PRINT
NEXT i
END SUB
LET count=0 !歩数
SUB try(x,y) !再帰的に試みる
local i
IF board(x,y)<>0 THEN EXIT SUB !すでに訪れた
LET count=count+1 !一歩進める
LET board(x,y)=count
IF count=N*N THEN !全部の路を歩いたら
CALL printboard !完成!
ELSE
FOR i=0 TO 7 !8方向の候補を検証する
CALL try(x+dx(i),y+dy(i))
NEXT i
END IF
LET board(x,y)=0 !元に戻す
LET count=count-1
END SUB
!main()
FOR i=0 TO N+3 !盤を初期化する(壁)
FOR j=0 TO N+3
LET board(i,j)=1
NEXT j
NEXT i
FOR i=2 TO N+1 !(路)
FOR j=2 TO N+1
LET board(i,j)=0
NEXT j
NEXT i
CALL try(2,2)
END