Discuss / Python / 作业打卡

作业打卡

Topic source

leisure_cat

#1 Created at ... [Delete] [Delete and Lock User]

首先作为初学者表示,面对这个一汉诺塔脸懵逼,看到答案也是一头雾水,下面来稍微说说我对答案的理解吧

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') ,我感觉对于理清思路很重要.


  • 1

Reply