用Python解决汉诺塔问题

'''

1、解决汉诺塔问题之前先简单讲解一下我对递归思想的理解,
    即:我们可以将一个问题分解为无数个次一级的问题,再通过对次一级问题的分解,得到一个我们能直接解决的问题 (递)
    然后通过反推得到我们最开始的问题的解 (归)
2、一个比较好理解的例子是处理阶乘问题:
    n! = n * (n-1)! 
    ……
    9! = 9 * 8!
    8! = 8 * 7!
    7! = 7 * 6!
    6! = 6 * 5!
    5! = 5 * 4!
    4! = 4 * 3!
    3! = 3 * 2!
    2! = 2 * 1!
    1! = 1
    即: n! = n * (n-1) * (n-2) * …… * 3 * 2 * 1
    
'''

def hannoi(n,x,y,z):
    if n==1:					#对应 2.4
        print(x,'-->',z)
    else:
        hannoi(n-1, x, z, y)	#对应 2.1
        print(x,'-->',z)		#对应 2.2
        hannoi(n-1, y, x, z)	#对应 2.3
 
n=int(input("请输入汉诺塔的层级数:"))   
hannoi(n, "X", "Y", "Z")

'''
1、假定汉诺塔的层级由上到下分别是:1··2··3··4··5··6·· ··n
   假定汉诺塔游戏中的三个区域分别为:起始区、中转区、结束区
2、已知汉诺塔的层次为n层,拆分汉诺塔问题为:
    2.1  将第n层以上的层次看做一个整体N,从起始区移动到中转区
    2.2  将第n层移动到结束区
    2.3  将N移动到结束区(即:将起始区和中转区互换,重复以上步骤)
    2.4  设置何时终止2.3的重复(即汉诺塔的层数只有一层的时候,直接将汉诺塔从起始区移动到终止区即可)
         n = 1 时,print (x ,'-->', z)
3、因为每解决一层的问题就需要调用一次函数,所以通过改变参数位子顺序和保持输出格式的统一,来保证传参的正确性

'''

你可能感兴趣的:(Python)