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

汉诺塔:

汉诺塔问题就是有三个柱子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)。

 代码:

结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bingbing~bang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值