python递加_python 递归 之加特技 汉诺塔

看不懂没关系看第二段一下的,最后再来看代码。

def move(n,a,b,c):#n代表起始柱子A,汉洛塔有多少层(n层),位置参数a,b,c代表三根柱子,目的是把 a柱子的移动到c

if n==1:

print(a,'->',c)#如果柱子a只剩下1个盘子,那么直接移动到C柱子。

else:

move(n-1,a,c,b) # 把a上的 (n-1)块 盘子 移动到b 盘子分成2块 (  第n块  (最下面的那块)  大的 ,(n-1)看成一块 即小的那块 移动到b  )

move(1,a,b,c)  #a上的最后一块 第n块 (大的) 移动到c

move(n-1,b,a,c) #把b上的(n-1)块 (小的那块) 移动到c

神奇的递归如何理解:

先理解最简单的

2层的

只有2个盘子的汉洛塔:

def move(a,b,c):

print(a,'->',b)#a柱子最小的盘子先放到b 对应代码 move(n-1,a,c,b)

print(a,'->',c)#最大的放到c      对应代码 move(1,a,b,c)

print(b,'->',c)#再把b最小的盘子叠到c上。对应代码 move(n-1,b,a,c)

其实这段代码包含了汉咯塔的基本逻辑

实际上 递归就是不断把问题   化解成最简单的,最低层次的。

这个代码可以理解成,不断把 n个盘子看成2个。最下面的盘子 ()和其余盘子,如     1(代表最大的那个)和(n-1)个盘子,至于n-1个盘子再如何移动,再递归。按照 移动盘子的基本逻辑,再移动

总结 递归三要素:

1.基本逻辑(最基础的逻辑)

2.问题的不断分化

3.返回值(有返回的递归 需要 不断的把返回  拼接 成最终答案 )

所以如何写一个递归:

1.分析这个问题最简单的情况

2.找出基本逻辑

3.找出返回值,( 有返回值情况 )

汉洛塔只需要  每步步骤,

所以无返回值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值