首先作为初学者表示,面对这个一汉诺塔脸懵逼,看到答案也是一头雾水,下面来稍微说说我对答案的理解吧
if n == 1: print(a, '-->', c) else: move(n-1, a, c, b) move(1, a, b, c) move(n-1, b, a, c)
查阅了知乎大神的回答,然后根据自己的理解整理如下:
其实最基本的模型就是move(2,A,B,C),把这个首先弄懂了,然后后面的步骤都可以用来抽象化,最后到move(64,A,B,C),其实也就分解成了
move(63,A,C,B) #把63个饼从A移到B
move(1,A,B,C) #把剩下来的一个饼(也就是最大的一块:第64块)从A移到C
move(63,B,A,C) #最后把B上的63块饼移到C
这就是最上层的抽象了
然后根据每步依次分解类推,其中的重点就是不要被第一步移动迷惑了
if n == 1:
print(a, '-->', c)
其实那只是一个移动的步骤,并不代表就是A>C
因为 到第一步 move(63,A,C,B) 分解时是要把 A上的移到B而不是C,这个子任务的目的是这个!
赞,你说的这个基本模型 (2,'A','B','C') ,我感觉对于理清思路很重要.
Sign in to make a reply
leisure_cat
首先作为初学者表示,面对这个一汉诺塔脸懵逼,看到答案也是一头雾水,下面来稍微说说我对答案的理解吧
查阅了知乎大神的回答,然后根据自己的理解整理如下:
其实最基本的模型就是move(2,A,B,C),把这个首先弄懂了,然后后面的步骤都可以用来抽象化,最后到move(64,A,B,C),其实也就分解成了
move(63,A,C,B) #把63个饼从A移到B
move(1,A,B,C) #把剩下来的一个饼(也就是最大的一块:第64块)从A移到C
move(63,B,A,C) #最后把B上的63块饼移到C
这就是最上层的抽象了
然后根据每步依次分解类推,其中的重点就是不要被第一步移动迷惑了
if n == 1:
print(a, '-->', c)
其实那只是一个移动的步骤,并不代表就是A>C
因为 到第一步 move(63,A,C,B) 分解时是要把 A上的移到B而不是C,这个子任务的目的是这个!