Discuss / Python / 这个题真的不简单, 做了好久

这个题真的不简单, 做了好久

Topic source

gylpnj

#1 Created at ... [Delete] [Delete and Lock User]
#!/usr/bin/env python3
# -*- coding:utf8 -*-
def move(n, a, b, c):
    print('#期待输出:')
    curMove(n, a, b, c)
def curMove(n, a, b, c):
    if n == 1:
        print('# %s --> %s' % (a, c))
    else:
        curMove((n-1), a, c, b)
        curMove(1, a, b, c)
        curMove((n-1), b, a, c)

gylpnj

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

我也稍微说一下吧, 先不管程序, 手写了 1 2 3 4 的情况, 然后不用递归方式, 用if elif 写出来, 就可以看出来了 简单的说, 就是, curMove(n, a, b, c)无论如何实现, 函数的意义就是, 把n个盘子, 从a挪到c(借助b的帮助). 5个盘子时, 我们先把4个盘子从a挪到b curMove((n-1), a, c, b) 再把最下面的盘子从a挪到c curMove(1, a, b, c) 再把b的4个盘子从b挪到c curMove((n-1), b, a, c) 4个盘子时, 我们先把3个盘子从a挪到b curMove((n-1), a, c, b) 再把最下面的盘子从a挪到c curMove(1, a, b, c) 再把b的3个盘子从b挪到c curMove((n-1), b, a, c) 3个盘子时, 我们先把2个盘子从a挪到b curMove((n-1), a, c, b) 再把最下面的盘子从a挪到c curMove(1, a, b, c) 再把b的2个盘子从b挪到c curMove((n-1), b, a, c) 2个盘子时, 我们先把1个盘子从a挪到b curMove((n-1), a, c, b) 再把最下面的盘子从a挪到c curMove(1, a, b, c) 再把b的1个盘子从b挪到c curMove((n-1), b, a, c) 1个盘子时, 只需要把盘子从a挪到c curMove(1, a, b, c) ...我觉得比较绕的是位置的相对变化, 每次递归之后, 相对来说, 函数执行的位置变化了, 不知道这么讲是否更好理解呢?

题目说的是三个柱子


  • 1

Reply