文章目录
- 214. 递归解决什么问题
- 215. 递归执行机制1
- 216. 递归执行机制2
- 217 递归执行机制3
- 217.1 阶乘
- 218. 递归执行机制4
- 219. 斐波那契数列
- 220. 猴子吃桃
- 221. 222. 223. 224. 老鼠出迷宫1,2,3,4
-
- 224.1 毕向东java基础 什么是回溯
- 225. 汉诺塔
- 226. 八皇后
214. 递归解决什么问题
简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变得简洁
递归能解决的问题:
215. 递归执行机制1
运行结果:
n=2
n=3
n=4
函数调用栈过程:
【注】每一个栈都会完整的执行方法,在哪里调用就在哪里返回。
216. 递归执行机制2
将上一节课的代码的if条件假如else如下
就变成结果只有
n=2
其函数调用栈相当于下图:
217 递归执行机制3
217.1 阶乘
运行结果:
5 的阶乘 res =120
218. 递归执行机制4
219. 斐波那契数列
请使用递归的方式求出斐波那契数1,1,2,3,5,8,13…给你一个整数 n n n,求出它的值是多少
220. 猴子吃桃
猴子吃桃子问题:有一堆桃子,猴子第一天吃了其中的一半,并再多吃了一个,以后每天猴子都吃其中的一半,然后再多吃一个。当到第10天时,想再吃时(即还没吃),发现只有1个桃子了。问题:最初共多少个桃子?(我以前写过一个循环的版本,现在用递归写,看来有些数据要写死了,比如第10天就得固定下来)
221. 222. 223. 224. 老鼠出迷宫1,2,3,4
运行结果:
当前地图情况:
1 1 1 1 1 1 1
1 0 0 0 0 0 1
1 0 0 0 0 0 1
1 1 1 0 0 0 1
1 0 0 0 0 0 1
1 0 0 0 0 0 1
1 0 0 0 0 0 1
1 1 1 1 1 1 1
老鼠找路情况:
1 1 1 1 1 1 1
1 2 0 0 0 0 1
1 2 2 2 0 0 1
1 1 1 2 0 0 1
1 0 0 2 0 0 1
1 0 0 2 0 0 1
1 0 0 2 2 2 1
1 1 1 1 1 1 1
修改策略:上右下左
运行结果:
当前地图情况:
1 1 1 1 1 1 1
1 0 0 0 0 0 1
1 0 0 0 0 0 1
1 1 1 0 0 0 1
1 0 0 0 0 0 1
1 0 0 0 0 0 1
1 0 0 0 0 0 1
1 1 1 1 1 1 1
老鼠找路情况:
1 1 1 1 1 1 1
1 2 2 2 2 2 1
1 0 0 0 0 2 1
1 1 1 0 0 2 1
1 0 0 0 0 2 1
1 0 0 0 0 2 1
1 0 0 0 0 2 1
1 1 1 1 1 1 1
224.1 什么是回溯
在下标(2,2)处设置障碍物,小球先向下走,可以走通,到达下标(1,2),然后测试发现上下左右都走不通(上走不通是因为之前走过1,1下标点),于是它回到上一个栈,然后根据刚才走的情况,判断向右走
后面能用数据结构算法求出最短路径
225. 汉诺塔
- 思路
如果A塔只有一个盘子,直接从A塔移动到C塔
如果A塔有很多盘子,把最后一个盘子上面的所有盘子视为一个盘子,将A塔上面这个盘子堆移动到B塔,然后将A塔最下面的盘子移动到C塔,最后将B塔这一堆移动到C塔,递归思想只考虑这个中间过程和跳出递归的过程。
运行结果:
A->C
A->B
C->B
A->C
B->A
B->C
A->C
A->B
C->B
C->A
B->A
C->B
A->C
A->B
C->B
A->C
B->A
B->C
A->C
B->A
C->B
C->A
B->A
B->C
A->C
A->B
C->B
A->C
B->A
B->C
A->C
226. 八皇后
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于 1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
运行结果
……太长了,直接看最后
解法92:
# # # # # # # o
# # # o # # # #
o # # # # # # #
# # o # # # # #
# # # # # o # #
# o # # # # # #
# # # # # # o #
# # # # o # # #
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/4301.html