zoukankan      html  css  js  c++  java
  • 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.找出返回值,( 有返回值情况 )

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

     

  • 相关阅读:
    ###第五次作业###
    第四次作业
    第三次作业
    jquery cookie插件
    jquery.form.js(ajax表单提交)
    jquery 中 $.map 用法
    jQuery中的$.grep()使用
    jquery-validation验证插件
    软件工程实践2017第一次作业
    jQuery UI dialog 的使用
  • 原文地址:https://www.cnblogs.com/YoungElder/p/8605432.html
Copyright © 2011-2022 走看看