次のコードでスタックはフレームに入りますか? num=5 の場合。出力がゼロになるのはなぜですか..5から1までの数字はどうですか?
void rec(int num)
{
cout << num << endl;
if( num > 0 )
return rec(num-1);
cout << "after" << num << endl;
}
スタックの概念は含まれていますか?
次のコードでスタックはフレームに入りますか? num=5 の場合。出力がゼロになるのはなぜですか..5から1までの数字はどうですか?
void rec(int num)
{
cout << num << endl;
if( num > 0 )
return rec(num-1);
cout << "after" << num << endl;
}
スタックの概念は含まれていますか?
「出力がゼロになるのはなぜですか」
関数のロジックを見てください。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
。
「戻り値」を見たい場合は、次のようにすることができます。
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;
}