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

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

     

  • 相关阅读:
    Ant简单工程的构建
    [转载] 无所不能的“蚂蚁”--Ant
    引体向上高级技巧:停顿式引体向上!
    引体向上腰酸?下背痛?你做对了吗?
    划船训练常见错误:含胸驼背肩胛骨活动不足
    引体向上
    仰卧飞鸟:仰卧哑铃飞鸟图解教程
    蝶机夹胸:蝴蝶机夹胸夹胸/飞鸟动作图解教程
    史密斯卧推:杠铃史密斯下斜卧推、上斜机卧推、平板卧推动作图解
    练胸秘籍:胸肌训练5大重点
  • 原文地址:https://www.cnblogs.com/YoungElder/p/8605432.html
Copyright © 2020-2023  润新知