其他分享
首页 > 其他分享> > 冰冰学习笔记:汉诺塔和青蛙跳台阶

冰冰学习笔记:汉诺塔和青蛙跳台阶

作者:互联网

汉诺塔:

汉诺塔问题就是有三个柱子ABC,A柱子上从小到大放有n个盘子,我们要把这n个盘中经过中间B柱子移动到C柱子上,并且大盘子在移动过程中不能放到小盘子上面,一次只移动一个盘子。

下面以三个盘子为例子,我们分析一下走法。

那如果有n个盘子呢?

经过抽象我们可以将问题简化成三部分。。

1、将A柱上的n-1个盘子经过C柱移动到B柱

2、将A柱上的第n个盘子移动到C柱上。

3、将B柱上的n-1个盘子经过A柱移动到C柱上。

因此我们设计一个汉诺塔函数:

函数内部如何实现?

如果只有一个盘子,我们只需要将盘子从A柱子移动到C柱子上即可,不需要借助中间柱子。

所以我们先设计一个移动函数move(),这个函数就是来打印移动的过程,即从哪个柱子移动到哪个柱子。并且每一次调用这个函数说明移动了一步,计数器加一,最后统计移动步数。

即:

 接下来设计汉诺塔函数内部实现过程,根据前文分析的三步进行设计。

代码:

来看结果:

 

 与前文分析的步数一致。

接下来分析一下代码

 青蛙跳台阶

问题:一只青蛙可以一次跳 1 级台阶或一次跳 2 级台阶, 例如:跳上第一级台阶只有一种跳法:直接跳 1 级即可。
跳上两级台阶,有两种跳法: 每次跳 1 级,跳两次; 或者一次跳 2 级.问要跳上第 n 级台阶有多少种跳法?
解题思路:
1、设台阶数为n,当n=1时,即只有一个台阶,青蛙只有一种跳法,(1)。
2、当n=2时,有两个台阶,青蛙有两种跳法,即(1,1),(2)。
3、当n=3时,有三个台阶,青蛙有三种跳法,即(1,1,1),(1,2),(2,1)。当青蛙第一次跳上一节台阶时,剩下两级台阶则有两种跳法,即n=2时的跳法。若青蛙第一次跳两个台阶,则剩下1个台阶,即n=1时的跳法。所以n=3时的跳法为n=1时和n=2时跳法的和,即Jump(1)+Jump(2)。
4、当n=4时,有四个台阶,青蛙有五种跳法,即(1,1,1,1),(1,2,1),(1,1,2),(2,1,1),(2,2)。
当青蛙第一次跳上一个台阶时,剩下三个台阶,即跳上三个台阶的方法。当青蛙第一次跳上两个台阶时,剩下两个台阶,即跳上两个台阶的方法。所以方法个数为跳上三个台阶的方法加上跳上两个台阶的方法。Jump(3)+Jump(2) .....
所以当有n节台阶时,其跳法总和为Jump(n-1)+Jump(n-2)。

 代码:

结果:

 

 

标签:柱子,冰冰,台阶,青蛙,跳法,汉诺塔,盘子,移动
来源: https://blog.csdn.net/bingbing_bang/article/details/122605023