作业及初学者的理解观点
Topic source2. 关于答案的理解:
# 期待输出:
# A --> C
# A --> B
# C --> B
# A --> C
# B --> A
# B --> C
# A --> C
为什么会按编程输出这样一个结果呢。
汉诺塔定义很多大佬在评论区都有说明,可以参考。我简单说下,将除最下面一个看做一个整体,然后就变成n=2的逻辑,用3步法挪动。
首先n=2很好理解,直接三步:
a-b ; a-c ; b-c 即:
A-B ; A-C ; B-C
若n=3来举例,我们紧跟着看编程else返回的3个逻辑结果:
1. move(2,A,C,B)
2. move(1,A,B,C)
3. move(2,B,A,C)
其中2由定义,可直接得到@2 A--C
1又成了一个新的函数,但要注意 “b=C,c=B” (这一点理解很重要!)
那么又返回n=2的逻辑,按定义函数条件算出
a-b ; a-c ; b-c 将赋值带入:
即@1 A-C; A-B ; C-B
同理3也成了n=2的逻辑,但注意 "a=B,b=A"
得到@3 B-A ; B-C ; A-C
最后按@1,@2,@3顺序得到:
A-C
A-B
C-B
A-C
B-A
B-C
A-C
- 1
用户06lgllpdgh
1.作业:
if n == 1:
print(a, '-->', c)
else :
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)