帮忙解释这个递归函数

来源:百度知道 编辑:UC知道 时间:2024/06/01 21:07:33
我在看书发现这个递归函数,我想了很久还是不知道它是什么含义?请大家帮我看看,
请解释一下这个函数怎么执行的.
#include<iostream>
using namespace std;
void test(int &sum)
{
int x;
cin>>x;
if(x==0)
sum=0;
else
{
test(sum);
sum+=x;
}
cout<<sum<<endl;
}
void main()
{
int sum=1;
test(sum);
}
输入
1
2
3
0
输出
0
3
5
6

这个程序是用来实现几个数的相加(我的理解),最后一个输出是加法的最终结果。
首先用我的语言解释一下递归的意义。递归算法就像是一些嵌套的屋子,每一层屋子里都有一个你想拿到的东西,你从最外层的门开始进去,但是你进的时候并不取走东西,而是等到你到达最里面的屋子时,取出这个最里面的东西,并开始往外走,到次里层屋子取出东西,继续往外走,重复这个动作,一直到你取出最外面屋子里的东西并跳出整个屋子。
下面针对你的程序用上面的思想来解释一下:
现在你要实现几个数的和,你每一次输入的数字相当于进入下一层屋子的钥匙。第一次输入的是1,你进到第一层,把1先存在这里,并不作加法,第二次输入2,进到第二层,把2放在这一层,然后输入3,进入第三层,把3放在这里,最后输入0,你进入了最里面的屋子,此时执行了
if(x==0) sum=0; //else 就不执行了,所以也没有后续的test(sum)
cout<<sum<<endl; //这时第一次输出sum,为0。
现在从最里面该往外走了,首先到了第三层,这里有你存着的数字3,现在,把刚才得到的sum=0与3相加,得到了sum=3,并输出。
再往外走,用sum=3和这里存的2相加,得到sum=5,并输出。
最后一层,肯定就得到了6。
这样讲解不知道你明白了没有?希望对你有帮助!

首先
int sum=1;
test(sum);
这里,实际上sum是个变量
void test(int &sum) 形式参数是个引用
你的实参是sum,形参也是sum,当然这样是可以的
只不过这样可能误导了你把
你可以把形式实参或者形式参数改个名字,这样就好理解多了
如果你x输入的不是0,则会执行else分支
else
{
test(sum);
sum+=x;
}
cout<<sum<<endl;
}
这里再次调用test(sum);由于形式参数是对sum的引用
所以再次调用,实际上这是个递归,只是是由你来控制