2012-05-06 16 views
1

ループ内で再帰関数を呼び出すと、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プリンタであることを)私は一つだけ24を得た実際の結果である 次のサンプルコードを考えてみましょう。

問題2main()関数が繰り返し呼び出される理由は、私が再帰的にmain関数を呼び出さない理由です。

誰かが複数の出力を得るためにループの中で再帰関数を呼び出す方法について私にあなたの考えを伝えたら素晴らしいと思います。

答えて

11
for(int i=0; i < n; i++); <---------------------- notice this 
     std::cout << fact(4) << std::endl; // 24 ?? 

forループの後;に注意してください。それがあなたに1つの出力しか得られない理由です。 std::coutは、ループが終了した後に実行されます。 外部ループです。

これは、あなたの最初の質問に対する答えです。今度は2番目の質問

main()関数が再帰的にmain関数と呼ばれていなくても繰り返し呼び出される理由は何ですか?

あなたが投稿したコードにこの問題があるとは思わない。投稿していないコードでは、main()が再帰的に呼び出されているため、何か別の処理をしているに違いありません。

なお、C++言語仕様によってを禁じあなたコード(再帰的にまたはそれ以外)であるからmain()を呼び出します。したがって、GCCで-pedanticオプションを指定してコンパイルした場合、プログラムからmain()に電話するとコンパイルしないでください。

関連する問題