关于递归次数的计算
来源:互联网 发布:职称论文淘宝代笔 编辑:程序博客网 时间:2024/05/22 05:17
有这样一个题目:
递归函数:
1 int x(int n) 2 { 3 if(n<=3) 4 { 5 return 1; 6 } 7 else 8 { 9 return x(n-2)+x(n-4)+1;10 }11 }
计算x(x(8))递归调用次数。
大多数可能觉得这是一个很简单的题目,的确很简单。但是要想在没有编译器的情况下正确的算出这个递归调用次数其实还是需要点耐心.
x(x(8))我们先计算x(8),我们用count=0计数递归调用次数
1.x(8)=x(6)+x(4)+1 count=1;
2.x(6)=x(4)+x(2)+1,x(4)=x(2)+x(0)+1 x(8)=x(4)+2*x(2)+x(0)+3 count=3;
3.x(4)=x(2)+x(0)+1 x(8)=3*x(2)+2*x(0)+4 count=4
4.x(2)=1,x(0)=1; x(8)=9 count=9
再计算x(9)
1.x(9)=x(7)+x(5)+1 count=10
2.x(7)=x(5)+x(3)+1,x(5)=x(3)+x(1)+1 x(9)=x(5)+2*x(3)+x(1)+3 count=12
3.x(5)=x(3)+x(1)+1 x(9)=3*x(3)+2*x(1)+4 count=13
4.x(3)=1 x(1)=1 x(9)=3+2+4=9 count=18
接下来我们再用程序验证一下:
1 #include <iostream> 2 using namespace std; 3 4 static int count=0; 5 6 int x(int n) 7 { 8 if(n<=3) 9 {10 count++;11 return 1;12 }13 else14 {15 count++;16 return x(n-2)+x(n-4)+1;17 }18 }19 20 int main(void)21 { 22 cout<<"x(x8)="<<x(x(8))<<endl;23 cout<<"count="<<count<<endl;24 system("pause");25 return 0;26 }
运行截图:
验证正确了
对于这种计算递归调用次数一定要思路清晰,最好是将所有的递归调用都递归到递归出口的地方再统一进行递归出口的调用,这样不容易造成紊乱,个人意见,仅供参考。
1 0
- 关于递归次数的计算
- 关于Python中递归次数
- 辛星关于php最大递归次数的讨论
- 计算循环的次数
- 记忆法求递归(能够大限度的减少计算次数)
- 递归调用的次数限制
- 判断递归执行的次数
- 计算字符串出现的次数
- 【C++】计算进位的次数
- 计算字符出现的次数
- 计算数字出现的次数
- 计算零到二十出现的次数
- DNS递归与迭代查询次数计算
- 递归数的计算
- XMU1428 求递归的次数 帅额
- 用递归的方法汉诺塔求次数
- Sql计算一年中周内各日期的次数
- 计算一年中周内各日期的次数
- 剑指offer-面试题26.复杂链表的复制
- Android 双击退出APP
- 了解ASP.NET MVC几种ActionResult的本质:HttpStatusCodeResult & RedirectResult/RedirectToRouteResult
- Help to memory sth.
- Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
- 关于递归次数的计算
- 【剑指offer系列】 反转链表___16
- 《Deep Learning》全书已完稿_附全书电子版
- 关于C++中覆盖,重载,隐藏的一点说明
- 笔记练习:《Javascript入门经典(第5版)》page89_7.9_Practice
- css练习008--中国象棋盘&&棋子
- call,apply,bind
- ASP.NET MVC下的四种验证编程方式
- ActionBar笔记