void rec(int n)
{
if (n > 0) {
rec(n - 1);
rec(n - 3);
}
cout << "n=" << n << endl;
cout << "end" << endl;
}
int main()
{
rec(4);
return 0;
}
连续两次递归的执行过程是怎样的??
上面的程序连续调用了两次rec()函数:
- 先进行第一个调用的递归,直到满足跳出条件,即当n=0时,所以第一个输出的是n=0
- 返回到上次调用之后的代码块,即当n=1时第二个调用rec(1-3),易知返回-2
- 再返回到上次调用之后的语句,即
cout << "n=" << n << endl;
此时的n=1,所以返回1;
- 循环这个过程一直到第二个调用n=4时,即rec(4-3),此时并不能马上跳出递归条件,所以得继续对该函数进行递归,先后返回 0 -2 1,最后执行
cout << "n=" << n << endl;
得到n=4
输出结果如下:
重要的是要记住每次函数调用前,都会将调用前后那一条代码的地址存入栈中保存