Discuss / Python / 终于理解这个题用递归的意思了

终于理解这个题用递归的意思了

Topic source

wujinkongxu

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

本题思路: 无论有多少层盘,都把上面的n-1层等效为一个整盘挪到中间的B柱,然后把最下面一个挪到C柱,然后再移动那n-1层整盘到C柱。 方案: 1)只有一层:那就直接从A到C; 2)有多层: ①把上面那n-1层挪到B柱;(用到递归函数) ②把最后一层挪到C柱; ③把那n-1层挪到C柱。(用到递归函数) 难点:柱子为啥要换来换去? 由于递归函数最终要回归到只有一层的情况,这种情况的路径是A--->C,相当于我们的函数只能从A往C移动盘子。所以: ①把上面那n-1层等效为一个整层挪到B柱时,要把b c交换; ②把最后一层挪到C柱,要把b c交换回来; ③把那n-1层挪到C柱,由于这n-1层实际在中间,所以要把a b交换。 '''

def move(n, a='A', b='B', c='C'): if n == 1: print(a, '---->', c) else: move(n-1, a, c, b) #把n-1层挪到B柱 move(1, a, b, c) #把最后一层挪到C柱 move(n-1, b, a, c) #把上面的n-1层挪到C柱

最后的问题: 上面的代码ok,修改成如下就出错,问题在哪里我还没想明白,求指点:

def move(n, a='A', b='B', c='C'): if n == 1: print(a, '---->', c) else: n = n -1 x = b b = c c = x move(n, a, b, c) x = b b = c c = x move(1) x = b b = a a = x move(n, a, b, c)

wujinkongxu

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

def move(n, a='A', b='B', c='C'): if n == 1: print(a, '---->', c) else: n = n -1 x = b b = c c = x move(n, a, b, c) x = b b = c c = x move(1) x = b b = a a = x move(n, a, b, c)

出错原因找到了: move(1) 改为:move(1, a, b, c)

厉害

x=b b=a a=x 这是啥意思

wujinkongxu

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

交换A B这两根柱子


  • 1

Reply