ループ内で再帰関数を呼び出すと、2つの問題が発生します。次のサンプルコードを検討してください。
int fact(int x)
{
if(x == 1)
return 1;
return x*fact(x-1);
}
int main() {
int n = 2;
for(int i = 0; i < n; i++);
std::cout << fact(4) << std::endl; // 24 ??
return 0;
}
問題1:このプログラムで期待した結果は24 24
(プリンターの場合は2倍24
)ですが、実際の結果は1つだけ24
です。
問題2:main()
メイン関数を再帰的に呼び出さなくても、関数が繰り返し呼び出される理由は何ですか。
複数の出力を取得するためにループ内で再帰関数を呼び出す方法について誰かが私に考えてくれたら素晴らしいと思います。