- 600 名前:デフォルトの名無しさん mailto:sage [2012/05/19(土) 03:22:05.75 ]
- >>596
>int f(int n) { >return (n == 0) ? 1 : n * f(n - 1); >} > >ですら末尾再帰ではないことになるのでしょうか? 末尾再帰では有りません。 「ループに変換可能か」と言うより 「ジャンプ最適化可能か」です。 なお、c言語では末尾再帰最適化を行わない処理系も多いので、 処理系依存度を下げたいなら、末尾再帰に拘る必要は有りません。 >末尾再帰であるために > >int f(int n, int i, int p) { >return (n == i) ? p : f(n, i + 1, p * (i + 1)); >} >codepad.org/OSvQa0ni >と書かねばならないのでしょうか? Yes。 ただしgccなどの一部の処理系では上記部分を関数内関数で書けるので、 呼び出し側からはint f(int n)で済ませることが出来ます。
|

|