python——递归方法解决汉诺塔问题

汉诺塔移动规则:

每次只能移动⼀个盘⼦

移动过程中,⼩的盘⼦不能处于⽐它⼤的盘⼦下⾯

python——递归方法解决汉诺塔问题_第1张图片

解题思路:

不妨设有函数hanoi( )可以求解该问题,函数参数如何设计?

函数hanoi(n, S=‘A’, T=‘B’,H=‘C’) 可以求解该问题,

其中n 为盘⽚数,A, B C 分别为三个柱⼦,

S 表⽰出发的柱⼦,T 为⽬的柱,H 为过渡⽤柱⼦

python代码:


# -*- coding:utf-8 -*-

def hanoi(n, source, target, helper):
    if n==1:                    #边界条件
        moveSingleDesk(source, target)
    else:
        hanoi(n-1, source, helper, target)    #将n-1个盘从A移到C
        moveSingleDesk(source, target)        #将A中最大的一个盘移到B
        hanoi(n-1, helper, target, source)    #将n-1个盘从C移到B

def moveSingleDesk(source, target):
    disk = source[0].pop()
    print("moving " + str(disk) + " from " + source[1] + " to "           target[0].append(disk))

 

你可能感兴趣的:(算法加强练习,python学习笔记)