*育たない再帰 [#d4ecbaa8] 例えば1変数の再帰の利用方法を考えてみましょう. ~ a(X):[1]a([2]) a([3]) ほとんどの再帰の用法は, [2]の部分で''Xを育てて'', その育っていくXを~ 次々と同じ形の関数[1]に代入していくことにあるでしょう. ~ しかし実際には, ''Xを育てない''利用方法もあります. ---- [2]の部分に1つでもXが含まれると, Xが大きくなっていきます. ~ したがって, Xを育てない構文は, [2]の部分にXが含まれないものです. ~ 例えば次のコードを見てみましょう: a(X):ssXssla(r) a() 【画像】 Xの部分にrを代入し続けるので, ssrsslを繰り返す形になりますが, ~ Xがrになり続けるのは第2項以降なので, 結果として, ~ > ssssl, ssrssl, ssrssl, ssrssl, ... という繰り返しが実現されます. ---- このように, 再帰と言っても育つものばかりではありません. ~ なお, 原理的にはこれは[[特殊な初項]]で説明したのと全く同じ原理で, ~ ''0変数の再帰''に特殊な初項を作るための変数Xを加えた格好になっています. ~ したがって, [[特殊な初項]]に慣れている人にとっては当たり前の構文なんですが, ~ 「育たない再帰」という発想自体が盲点になりやすい (実際, このテーマの出題は初期にはほとんど見当たりません) ~ と思います. 使ったことがない人はぜひ使える場面を探してみてください!