Discuss / Python / 总结

总结

Topic source

GhZicE-奇

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

第一次接触这种算法,说一下自己的理解

如果只有一块的话,就 A -- C

如果有两块的话,则需要以 B 作为缓冲,也就是先将 A -- B, 然后剩下一块,进行 A -- C (此时进入一块的递归)

如果有三块,则把上边两块看为一个整体,以 B 作为缓冲,进行 A -- B (此时进入递归,也就是两块的时候,进行 A -- C 的移动(此时目的是移动到B 而不是C, 所以进入新的递归 A -- B ))。此时两块整体在B,底块在A,所以进行 A -- C 的移动。然后再将两块的整体进行拆分,也就是 B 通过 A 缓冲 进入C。也就是实际执行 B -- C 的移动。

总结:

上边两块为整体,也就是以 n-1 块进行 A -C- B, 然后 A -- C, 然后再以 n-1 块为整体进行 B -A- C。

上代码


def move(n, a, b, c):
    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(3, 'A', 'B', 'C')

不是每次只能移动一个吗?

LeborYi

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

想象成三步:第一步:把前n-1从A移动到B;第二步:把最后一个n从A移动到C;第三步,把n-1从B移动到C。至于n-1么,用递归来实现以上的操作啦////


  • 1

Reply