一、递归--汉诺塔

1、有三个轴(x,y,z),64个盘子,把所有盘子从X轴移动到Z轴,要求移动到Z轴的盘子从上到下排序

思路:

问题一:将X上的63个盘子借助Z移动到Y上,拆解为:

a、将前62个盘子从X移动到Z上

b、将第63个盘子从X移动到Y上

c、将Z轴上的62个盘子移动到Y上

问题二:将Y上的63个盘子借助X移动到Z上,拆解为:

a、将Y上前62个盘子移动到X上

b、将Y上的第63个盘子移动到Z上

c、将X轴上的62个盘子移动到Z上

代码:

def haoi(n,x,y,z):
    if n == 1:
        print(x,' --> ',z)
    else:
        haoi(n-1,x,z,y) #将前n-1个盘子从x移动到y上
        print(x, ' --> ',z) #将最底层的最后一个盘子从x移动到z上
        haoi(n-1,y,x,z) #将y上的n-1个盘子移动到z上

n = int(input('请输入汉诺斯的层数:'))
haoi(n,'X','Y','Z')

'''
执行结果:
请输入汉诺斯的层数:3
X  -->  Z
X  -->  Y
Z  -->  Y
X  -->  Z
Y  -->  X
Y  -->  Z
X  -->  Z
'''

二、动手练习题

1、使用递归编写一个十进制转换成二进制的函数(要求采用“取2取余”的方式,结果和调用bin()一样返回字符串形式)

05-11 13:54