漏了关键的思路,想了好久怎么按顺序打印出来的
Topic sourcedef move(n, a, b, c):
if n == 1:
print(a, '-->', c)
else:
move(n-1, a, c, b) # N片拆解为第N片和第(N-1)片两部分,n - 1为1时才能移动,此时目的是a到b
move(1, a, b, c) # n = 1,直接a移到c
move(n-1, b, a, c) # 同上,一层时的移动目的是b到c#exp, n = 3时,进入else,卡在第一步move(2,a,c,b) 同时移动2片,无法进行,因此把这个操作再拆解,套用最初的n = 1的流程,这时a的目标不再是c而是b,因此交换符号即可# 也就是move(2,a,c,b)= move(1,a,b,c)| move(1,a,c,b) | move(1,c,a,b) 注:与最初的n=1不同之处在于这次move(2)的目的是a-->b,n = 1最初目的是a-->c,因此直接交换b,c符号完成到交换最终目标
move(3, 'a', 'b', 'c')
- 1
。
核心就是拆解,大问题拆成小问题,多层拆成最基本的2层,然后注意移动的目的地,也就是每一步要从哪移动到哪。