2

このコードを実行すると、出力は次のようになります。

hello5
hello4
hello3
hello2
hello1
0
1
2
3
4

それまでは理解してhello1いますが、なぜ増加しているのかわかりません。誰かが私にこれを説明できますか?

#include <iostream>
#include <iomanip>
using namespace std;

void myFunction( int counter)
{
    if(counter == 0)
        return;
    else
    {
        cout << "hello" << counter << endl;
        myFunction(--counter);
        cout << counter << endl;
        return;
    }
}

int main()
{
    myFunction(5);

    return 0;
}
4

2 に答える 2

6

増分ではなく、再帰呼び出しの後に値を出力しているだけです。

   cout<<"hello"<<counter<<endl;
   myFunction(--counter);
   cout<<counter<<endl; // <--- here

パラメータは値で渡されるため、ローカル変数は再帰呼び出し内で変更されません。つまり、 のコピーを渡しています--counter。そのため、呼び出しの後、内部でどのようcounterに変更されても、ex カウンターが取得されます。

于 2012-04-04T09:58:52.800 に答える
3

あなたはこのように行きます:

    m1:Print "hello 5",
        m2:Print "hello 4",
              m3:Print "hello 3",
                   m4:Print "hello 2"
                        m5:Print "hello 1"
                             m6: -- RETURNS
                        m5:Print "0" --  -- FUNCTIONS CONTINUES AND ENDS
                   m4:Print "1" -- FUNCTIONS CONTINUES AND ENDS
              m3:Print "2" -- FUNCTIONS CONTINUES AND ENDS
        m2:Print "3" -- FUNCTIONS CONTINUES AND ENDS
    m1:Print "4" -- FUNCTIONS CONTINUES AND ENDS

では、なぜ 0 を出力するのでしょうか。このため:

 cout<<"hello"<<counter<<endl;
   myFunction(--counter);
   cout<<counter<<endl;

カウンター = 1 の場合、hello1 を出力します。

次に、カウンターを DECREMENTS (--counter = 0) するため、myFunction(--counter); すぐに戻ります。

ただし、カウンターはまだデクリメントされているため、cout<< カウンター << endl; に達するとカウンター = 0 になります。1から始まったのに

于 2012-04-04T10:02:36.357 に答える