Discuss / Python / 作业及初学者的理解观点

作业及初学者的理解观点

Topic source

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)

2. 关于答案的理解:

# 期待输出:
# 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

紫陌ol

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

你这个解释毫无意义


  • 1

Reply