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 counter。

于 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;

如果 counter = 1,则打印 hello1

然后它递减计数器(--counter = 0),所以 myFunction(--counter); 马上返回。

但是计数器仍然递减,所以当到达 cout<< counter << endl; 时 counter = 0; 即使它开始于 1

于 2012-04-04T10:02:36.357 回答