-5

重複の可能性:
2つの場所の違いは何ですか?

昨日もこの質問をしましたが、以前は何も答えられませんでした。質問の中で何が起こっているのか、そしてこのプログラムの制御の流れを段階的に知りたいのです。

#include<stdio.h>
rec(int);
main()
{
    int x=5;
    rec(x);
    system("PAUSE");
    return 0;
}
rec(int y)
{    
    if (y>0)
    {
        rec(y-1);
        printf("%d ", y);
    }
    // printf("%d ", y)
}

printfそして、2つのステートメントで出力はどのように変化しますか?

4

1 に答える 1

1

rec は、条件が満たされた場合に自分自身を呼び出す再帰関数です。そのため、メイン ( rec(5) ) から呼び出されると、y は 0 より大きいため、パラメーター (y-1) として 4 を渡してそれ自体を呼び出します。その呼び出しが完了すると、 printf が実行されますが、それ自体に 4 が渡され、4 > 0 が true であるため、3 を渡して再度自分自身を呼び出します。これは、 rec に 0 が渡されるまで続きます。0 に達すると条件が満たされないため実行が停止するため、前の呼び出し (1 が渡されたとき) はその printf を実行し、次に ( y =2) の前の呼び出しはその printf を実行します。したがって、出力は 1 2 3 4 5 になります

編集:

あなたの質問は構文ではなく再帰に関するものだと思いました

于 2012-09-24T04:04:58.940 に答える