斐波纳契系列(递归)
原创1优化递归程序的一般方法是(A)
A 尾递归优化
B 循环优化
C 堆栈优化
D 停止值优化停止值优化停止值优化
解析: https://www.cnblogs.com/Alexander-Lee/archive/2010/07/21/1782543.html
尾递归 :
在函数返回时调用自身,并且return语句不能包含表达式。通过这种方式,编译器或解释器可以优化尾递归,以便递归本身,无论它被调用多少次,都只占用一个堆栈帧,并且不会发生堆栈溢出。 当进行尾递归调用时,如果进行优化,堆栈不会增长,因此无论进行多少次调用,都不会导致堆栈溢出。 不幸的是,大多数编程语言没有针对尾递归进行优化。
以斐波纳契系列为例,以斐波纳契序列为例,以斐波纳契柱为例,以斐波纳契柱为例
普通递归版本普通递归版本普通递归版本
int fab(int n){
if(n<3)
return 1;
else
return fab(n-1)+fab(n-2);
}
具有"线性迭代过程线性迭代过程"性质的递归尾递归过程
int fab(int n,int b1=1,int b2=1,int c=3){
if(n<3)
return 1;
else {
if(n==c)
return b1+b2;
else
return fab1(n,b2,b1+b2,c+1);
}
}
以fab(4)为例子
普通递归fab(4)=fab(3)+fab(2)=fab(2)+fab(1)+fab(2)=3 6次调用
尾递归fab(4,1,1,3)=fab(4,1,2,4)=1+2=3 2次调用
2以下有关递归次数的陈述是正确的()
递归的数量与每次划分后获得的分区的处理顺序无关。
解析:
递归的次数取决于递归树,而递归树又取决于轴枢轴的选择。树越平衡,递归次数就越少。
快速排序的快速排序方法 的递归次数 初始 数据的排列顺序是相关的。数据排列的顺序是相关的。
递归次数与数据的排列方式有关 如果已排序,则此数字为已排序;如果已排序,则此次数为已排序;如果已排序,则此计数为0(N)。理论上的最小数量0(logN)。
处理分区长度的顺序会影响递归期间用于堆栈的内存,而不是递归的数量。先处理短的可以减少递归深度。
转载于:https://www.cnblogs.com/zuiaimiusi/p/11169867.html
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除