0

次のコードでスタックはフレームに入りますか? num=5 の場合。出力がゼロになるのはなぜですか..5から1までの数字はどうですか?

void rec(int num)
{
    cout << num << endl;
    if( num > 0 )
         return rec(num-1);
    cout << "after" << num << endl;
}

スタックの概念は含まれていますか?

4

2 に答える 2

1

「出力がゼロになるのはなぜですか」

関数のロジックを見てください。if(num>0)- return rec(num-1);.
したがって、上記のすべての nubmer0に対して、関数は を使用して自分自身を再度呼び出すだけnum-1です。
そして、num==0あなたがこの線に着くときだけ

cout<<"after"<<num<<endl;

つまり、入力するすべての数値に対して、関数は何もせず 、行のnumber-1 cout<<"after"<<num<<endl;で自分自身を再度呼び出し、最後に自分自身を再度呼び出すことはなく (num > 0条件が false であるため)、出力されます0

于 2013-08-03T13:26:23.180 に答える
0

「戻り値」を見たい場合は、次のようにすることができます。

void rec(int num)
{
    cout << num << endl;
    if( num > 0 )
         rec(num-1);
    cout << "after" << num << endl;
}

これreturn rec(num-1);は技術的に有効ですが、関数は実際には何かを返すわけではないため、次のように書くのと同じです。

if (num > 0) 
{
    rec(num-1);
    return;
}
于 2013-08-03T13:36:51.570 に答える