首页 / C++ / c++递归中语句的执行顺序是怎样的?
c++递归中语句的执行顺序是怎样的?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c++递归中语句的执行顺序是怎样的?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1787字,纯文字阅读大概需要3分钟。
内容图文
![c++递归中语句的执行顺序是怎样的?](/upload/InfoBanner/zyjiaocheng/614/36bc790fe7f442a69c92329fb43380df.jpg)
案例一:
void recurs()
{
statements1;//等待被执行的语句1
if(test)
recurs();//调用自身,体现递归思想
statements2;//等待被执行的语句2
}
分析:这里用分层思想更便于理解,首先执行statement1语句,然后判断是否符合test条件,如果符合,进入下一层recurs()调用,直到判断不符合条件为止(到这里为止,我们下面的statement2语句一次也没有被执行)。然后这里执行最底层的statement2语句,并将程序控制权返回给上一层的函数,上一层的函数继续执行statement2语句,依次类推,知道将控制权返回到最初的函数手里结束。
但是我们肯定会有这样的疑问:为什么不是一条counting down紧接着一条Kaboom,而是先输出完所有的counting down才输出Kaboom呢?
下面贴一段代码辅助理解:(代码来源:C++ primer plus)
#include <iostream>
using namespace std;
void countdown(int n)
{
cout<< "counting down..."<< n << endl;//statement1执行语句
if(n>0)
countdown(n-1);//递归,调用下一层contdown()函数
cout<< ":Kaboom!"<< n <<endl;;//statement2执行语句
}
int main()
{
countdown(4);
return 0;
}
从上图不难看出,对于测试语句1则是一口气执行到了头,对于测试语句2则是从最底层执行回到最高层(数字的排序就可看出来,语句一是从4到0,语句二是从0到4,正好相反)
案例二:
#include<iostream>
using namespace std;
//斐波那契数列
int c(int n){
if(n<=2)
return 1;
else
return c(n-2)+c(n-1);
}
int main(){
cout<<c(5)<<endl;
}
但是当我们把n=1换成n=2的时候,程序输出结果又会发生什么变化?
#include<iostream>
using namespace std;
//斐波那契数列
int fun(int n){
if(n<=2)
return 2;
else
return fun(n-2)+fun(n-1);
}
int main(){
cout<<fun(5)<<endl;
}
可以看到,结果竟然变成了原先的两倍,这其实和递归终止语句(if(n<=2) return 1;)有关,我们可以画出递归二叉树来理清关系,
红圈部分就是递归结束的标志,每一支末尾都返回一个值,加起来就变成了结果,所以上面变化的原因就不难理解了。这也从侧面印证了递归终止语句不止用来判断递归是否结束,还在求值过程中发挥重要作用。
内容总结
以上是互联网集市为您收集整理的c++递归中语句的执行顺序是怎样的?全部内容,希望文章能够帮你解决c++递归中语句的执行顺序是怎样的?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。