次の再帰的階乗関数を考えてみましょう。
fact(n) =
if (n = 0) return 1
return n * fact(n - 1)
上記の関数は、ゼロを含むすべての正の整数に対して収束します。ただし、負の整数の場合は収束しません。
次に、次のプログラムについて考えてみます。
fact(n) =
if (n < 0) return 0
if (n = 0) return 1
return n * fact(n - 1)
上記の関数は、すべての整数に対して収束します。
再帰関数が収束するかどうかを静的に判断する方法を知りたいと思いました。