zoukankan      html  css  js  c++  java
  • 关于汉诺塔的思考,python3

    今天学习python函数时,打算写一个汉诺塔问题的实现,先是在脑海里想象了一下,有1块石头的时候,该怎么移,有2块石头的时候,该怎么移,越想越多,感觉脑袋就

    搅糊了,于是准备直接写代码。其实,之所以想象会把自己搞迷糊,是因为想象的石块会越来越多,移动的步骤也越来越多。而如果使用代码,就可以站到一个比较抽象

    的层次,移动的过程中,最大的问题就是把A柱的最大的一块,移到C柱上,如图所示:

    也就是说,假设有A、B、C三根柱子,有n个石盘,我们第一步要做的就是A的最大的一个石盘移动到C,如何才能做到这一步?那就是通过C把n-1的石盘移动到B上,

    然后把A上最大的一块移到C。剩余的操作类似,把B上的n-1的石盘,通过A移到C上。有了这个思路,代码就很简单了:

    def f_move(n,a,b,c):
        if n==1:
            print('move:',a,'-->',c)
        else:

      #通过C,把A上n-1的石盘移动到B
            f_move(n-1,a,c,b)

      #把A上最大的一块石盘移动到C
            f_move(1,a,b,c)

      #通过A,把B上n-1的石盘移动到C
            f_move(n-1,b,a,c)

    f_move(4,'A','B','C')

    执行结果:

    抽象的力量真的是无穷啊。

  • 相关阅读:
    BUAA OO Unit1 表达式求导
    中介者模式
    命令模式
    观察者模式
    解释器模式
    策略模式
    迭代器模式
    模板方法模式
    代理模式
    桥接模式
  • 原文地址:https://www.cnblogs.com/render-inside/p/9182100.html
Copyright © 2011-2022 走看看