• python day 11 汉诺塔问题


    汉诺塔问题
    1.相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。

    1. 分析:对于这样一个问题,任何人都不可能直接写出移动盘子的每一步,但我们可以利用递归的思想来解决。
      首先,基例是有的,即当n1时,只需要将A 上的直接挪到C上即可
      其次,想想有没有递推关系: (1)把n个圆盘,从A通过B挪到C上,可以拆解成,先把n-1个圆盘通过C挪到B上,(2)把剩下那一个挪到C上(3)把B上的通过A挪到C上
      3.递归程序解决
      count = 0
      def hanoi(n,src,dst,mid):
      global count
      if n
      1:
      print('{}->{}'.format(src,dst))
      count+=1
      else:
      hanoi(n-1,src,mid,dst)
      print('{}->{}'.format(src,dst))
      count+=1
      hanoi(n-1,mid,dst,src)
      a = int(input('请输入'))
      hanoi(a,'A','C','B')
      print(count)

    请输入3
    A->C
    A->B
    C->B
    A->C
    B->A
    B->C
    A->C
    7

    4.Thoughts
    (1)递归可以化繁为简,可以达到数学归纳法(多米诺骨牌)的效果。即,程序不必把每一步都明确,只需要明确,基例、链条,就可以解决问题
    (2)尤其是在解决一些过程超级复杂的问题时,递归具有优势
    (3)最重要的还是链条的确立。
    (4)说到底,这是人很难想出来的方法,计算机是怎么实现的?

  • 相关阅读:
    【Forza Horizon 5】频繁断网解决办法
    【Java】java.util.ConcurrentModificationException
    【MySQL】下发功能SQL
    【MybatisPlus】 Field '主键' doesn't have a default value
    【SpringBoot】数据源加密处理
    【VMware】将NAT虚拟机开放访问
    TreeView绑定数据库收藏
    存储过程概述
    asp.net页面直接输出纯xml
    如何保证远程登录服务器安全
  • 原文地址:https://www.cnblogs.com/cfqlovem-521/p/12109911.html
Copyright © 2020-2023  润新知