いきなりですが,お気に入りのコードを紹介しましょう.
a(X,Y):XXXXa(sX,Y-1)
例えば,a(r,10)のように使います.単純にa(X):XXXXa(sX)と書くと
どんどん大きくなって歯止めが利きません.このように,再帰で書くと
永久に成長していってしまうパターンを,好きなサイズで止めるのが
数値引数の重要な使い方の1つです.
なお,上述のa(r,10)は,9×9の正方形状の領域全体を通って
元の位置に戻ってきます.私はこのような動きをボムと呼んでいます(笑)
正方形状の領域が多いような問題では,ボムを打ちながら
移動していくと簡単にたどりきれるようなことも多いです.
灰色マスが少ない問題では結構重宝しています.
他にも,a(X,Y):Xa(rX,Y-1)のような定義をして,
a(ss,8)などをボムのように使うといった戦略もありそうです.
9byte以下などで書ける再帰で出てくる形が点在している
問題などでは,適切なボムを作ってから挑むとよいかもしれません.
a(X,Y):XXXXa(sX,Y-1)などのコードは,ときにはボムを作る以上の
働きをしてくれます.例えばa(p,1)と書けばpを4倍してくれます.
また12歩進むには,a(sss,1)…よりもa(,3)と書くのが上手いです(計算してみてください).
勿論壁まで進むにはa(,5)とかやっておけばいいでしょう.
また,a(a(r,10)r,255)などとすると,ボムを打ちながら
歩幅が増大していき,ある意味で「十分大きな再帰」の役割を
果たしています.
厳密には「再帰の打ち切り」ではないのですが,
a(X,Y):a(sX,Y-1)XXXX
などと後ろに書くと便利なこともあります.また
a(X,Y):XXXXa(sX,Y-1)s
のように後ろに余分なものをつけることもあります.
どのような使い方があるか考えてみるとよいでしょう.