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.找出返回值,( 有返回值情况 )

汉洛塔只需要  每步步骤,
所以无返回值

 

 

 

 

 

posted @ 2018-03-19 22:09  年轻的长者  阅读(230)  评论(0编辑  收藏  举报