已经不是第一次写这个汉诺塔问题, 其实递归还真是不太好理解, 因为递归这种是想其实有点反人类, 为什么?
因为不太清楚, 写个循环一目了然, 用递归其实要把核心逻辑理清楚, 要不根本没法进行下去
所有才有了俗语:人用循环, 神用递归.
看来我也是普通人啊, 这个汉诺塔问题是递归必将的案例, 但是没有一个讲的很清楚的, 大部分都是把原理说了一遍, 还是需要自己来思考
反正我写了半天, 也没有自己搞出来, 大家不要笑我, 我是学工商管理的,
递归 说白了了就是数学归纳法, lz数学还是不错的, 所有我认为可以解决掉这个难题:
1. 分析了:说起来思想很简单, 当然代码也是相当简单,其实就是
1个盘子的时候, A->C
我们把上面n-1个盘子看成一个整体来操作.
我们要想移动最下面的盘子, 需要把上面n-1个盘子移到B盘子上去
这一步move(n-1, a, c, b)
然后移过去了, 我们需要打印一下print(A->C)
剩下n-1个盘子在哪? 对在 B盘子上, 同理操作是将这n-1个盘子移动到C上, 就ok啦
move(n-1, b, a, c)
就OK了
def move(n, a, b, c):
if n== 1:
print(a, "->", c)
else:
move(n-1, a, c, b)
print(a, "->", c)
move(n-1, b,a, c)