無限ループ
一見無限ループに見えるが、例外や大域ジャンプ(C言語ではsetjmp関数)や、ループの外から与えられた継続の呼び出しにより抜け出している、というパターンもある。サーバのように、本来無限に処理すべきである場合であればともかく、普通は、例外的ではない通常の処理の流れに例外処理を使うのは良くない作法とされる。たとえば、ファイルの終了が返されているにもかかわらず続きを読もうとしたのであれば例外を使うべきだが、単にファイルの終了に到達しただけならばそうすべきでないのが普通である。
ジャーゴンファイルに収録されている「The Story of Mel」には、どう見ても無限ループに見えるが、オーバーフローにより隣のメモリが書き換わることを利用してジャンプ命令を自己書き換えし終了する、という技を見た、という話が紹介されている。
無限再帰とは、無限ループの特例で、再帰で発生する無限ループである。最も些細な例としては、次の(疑似言語による)例で示したラムダ計算の Ω項である。
Ω は無限再帰なので、正規形を持たない。基底ケースが無かったり、帰納段階が不完全な構造的再帰では、普通は無限再帰になってしまう。
このような不完全な構造的再帰を次のコードで例示する。関数 sumFrom1To_ は無限再帰となる。これを修正するには、基底ケースを追加する。
この問題を修正したものが次の関数である。これは n が 1 未満か、n が大きすぎる時にだけ無限再帰となる、最初のケースはエラーチェックすれば回避できる。