要把大象装冰箱,总共分几步?
匿名sina网友V created at 9-25 9:16, Last updated at 9-25 9:16
要理解递归首先你得理解递归。递归题就是找感觉,要有要把大象装冰箱总共分几步?这样的思维方式,一但去抠细节你就中计了。
汉诺塔问题有三根柱子,我给它们分别命名为起始柱src,临时柱tmp,目的柱dst盘子一共分两种情况:1.只有1个盘子这种情况下,直接从起始柱src 移动到 目的柱dst ,完成任务。
2.有1个以上的盘子假如有n个盘子在起始柱,
- 首先把第n个盘子上方的n-1个盘子搬到临时柱。
- 然后把第n个盘子从起始柱移动到目的柱
- 最后把n-1个盘子从临时柱搬到目的柱任务完成
知道这些就够了,千万别XJB去想细节!!!知道这些就够了,千万别XJB去想细节!!!知道这些就够了,千万别XJB去想细节!!!
def move(from,to): #将盘子从from移动到to,动画效果需要脑补
print(from,'->',to)
def hanoi(n,src,tmp,dst):#将n个盘子从src搬到dst
if n == 1: #只有一个盘子的情况
move(src,dst)
else: #有一个以上盘子的情况
hanoi(n-1,src,dst,tmp) #将上方的n-1个盘子从src搬到tmp
move(src,dst) #将第n个盘子从src轻松愉快地移动到dst
hanoi(n-1,tmp,src,dst) #擦屁股,将tmp上的n-1个盘子搬到dst上
hanoi(3,'A','B','C')