关于python的汉诺塔问题

  • 规则:
    1. 每次移动一个盘子
    2. 任何时候大盘子在下面,小盘子在上面
  • 方法:
    1. n=1:直接把A上的盘子移动到C上,A->C
    2. n=2:
      1. 把小盘子从A放到B上,A->B
      2. 把大盘子从A放到C上,A->C
      3. 把小盘子从B放到C上,B>C
    3. n=3:
      1. 把A上的两个盘子,通过C移动到B上去,调用递归实现
      2. 把A上剩下的一个最大的盘子移动到C上去,A->C
      3. 把B上的两个盘子,借助于A,挪到C上去,调用递归
    4. n=n:
      1. 把A上的n-1个盘子,通过C移动到B上去,调用递归
      2. 把A上的最大的盘子,移动到C,A->C
      3. 把B上的n-1个盘子,借助A移动到C上去,调用递归   

代码如下:

def hano(n, a, b, c):
    '''
    汉诺塔的递归实现
    n:代表几个盘子
    a:代表第一个盘子
    b:代表第二个盘子
    c:代表第三个盘子
    '''
    if n == 1:
        print(a, "-->", c)
        return None

    if n == 2:
        print(a, "-->", b)
        print(a, "-->", c)
        print(b, "-->", c)
        return None
    #把n-1个盘子,从a塔借助于c塔,挪到b塔上  
    hano(n-1, a, c, b)
    print(a, "-->", c)
    #把n-1个盘子,从b塔借助a塔,挪到c塔上去
    hano(n-1, b, a, c)

a = "A"
b = "B"
c = "C"

  

猜你喜欢

转载自www.cnblogs.com/xinkule/p/9671884.html
今日推荐