递归_算法题解2
来源:互联网 发布:sql server 2016正式版 编辑:程序博客网 时间:2024/05/16 06:32
选择B:
递归工作栈里面包括返回地址、本层的局部变量和递归调用的形参代换用实参,所以正常情况下,无论递归过程有没有使用局部变量,转换为非
递归过程都需要用栈来模拟这个递归调用过程 。
当然,有一些特殊递归不用栈就可以直接转换,比如尾递归、常系数递推等,无论是否有局部变量
直接排除AD,注意力集中在B和C。
B肯定是对的,只有一次循环满足某个条件,不调用自己就返回,递归才会一层一层向上返回。
那么C呢,想一下,全局变量和参数确实可以用来控制递归的结束与否。
该不该选C呢?再仔细看一下题目(说实话,我很讨厌这种文字游戏),“这个函数一定...“,所以,问题集中在,是否是一定会使用这两种方式呢? 显然
不是的。
除了C中提到的两种情况外,还有如下控制递归的方式:
1. 局部静态变量是可以控制递归函数最终结束的
2. 可能通过异常来控制递归的结束。
3. 可以利用BIOS或OS的一些数据或一些标准库的全局值来控制递归过程的终止。
4. 可以把一些数据写入到BIOS或OS的系统数据区,也可以把数据写入到一个文件中,以此来控制递归函数的终止。
所以,答案为B
func(5) = 5 * func(4)
= 5 * 4 * func(3)
= 5 * 4 * 3 * func(2)
= 5 * 4 * 3 * 2 * func(1)
= 5 * 4 * 3 * 2 * 1
= 120
类似斐波那契数列的思想,若所求方法表示为f(n),因为当台阶大于
3
时,可看做是
f(n)=f(n-
1
)+f(n-
2
)+f(n-
3
);
//因为踏入最后一节阶梯有三种方法,最后一步是一步,两步,三步。
代码如下:
public
static
void
main(String[] args) {
int
f1 =
1
;
int
f2 =
2
;
int
f3 =
4
;
int
result =
0
;
for
(
int
i =
4
; i <=
15
; i++){
result = f1 + f2 + f3;
f1 = f2;
f2 = f3;
f3 = result;
}
System.out.println(result);
}
ack(0,n) = n+1,ack(0,1)=2,ack(1,0)=ack(0,1)=2
ack(1,n) = ack(0,ack(1,n-1))=ack(1,n-1)+1
An = An-1 + 1 推出递推公式为An=n+1,即ack(1,n)=n+2
ack(2,n) = ack(1,ack(2,n-1))=ack(2,n-1)+2
ack(2,0) = ack(1,1)=3
类似的:ack(2,n)= 2n+3
ack(3,n) = ack(2,ack(3,n-1))= 2ack(3,n-1)+3
ack(3,n) + 3 = 2(ack(3,n-1) + 3)
ack(3,0) = 5
等比公式:ack(3,n)=2^(n+3)-3
故:ack(3,3)=61
0 0
- 递归_算法题解2
- 递归-算法题解1
- C#_递归算法
- 递归_汉诺塔算法
- 递归算法时间复杂度_递归树
- Java基础_递归算法
- 25_递归算法详解
- 数据结构_递归算法_问题_栈溢出
- 数据结构学习之_汉诺塔递归算法
- 算法基础_递归的例子
- 黑马程序员_浅谈递归算法_02
- 【算法】_015_矩阵乘法_直接递归
- 车厢调度问题-非_递归算法
- 9种基本算法_递归
- 算法_二分查找的递归和非递归形式
- 《数据结构与算法》学习笔记21 递归_消除递归
- java版本_二叉树_非递归算法实现
- 数据结构_递归算法_斐波那契数列
- linux下一个网卡配置多个ip【虚拟ip】
- struts2 package 属性说明
- WebStorm配置及快捷键大全
- vfrok()的使用
- 男人35岁前要做好的几件事
- 递归_算法题解2
- Memcache详解
- android的几个tips
- [7]复用类(继承和组合的选择)0X03
- java 注解 三
- 青云桥电站调速器接力器打不开问题处理
- 【Android进阶】自定义带动画切换效果的ViewPager
- Android基础之创建ContentProvider
- Flume+Spark+Hive+Spark SQL离线分析系统