汉诺塔
2018-04-02 本文已影响0人
小赤焰
开始
在廖大神的博客上学习python。看到递归函数这块,大神给了一个课后作业,写出汉诺塔的算法实现。
过程
以前学c学过递归,汉诺塔也略有所闻。可是真要我写,实在不会,度娘教了我老半天,还是未能理解其中的真谛。都想放弃了,无意间看到 知乎上的回答 瞬间算法领悟真谛。
总结
其中的点在于 不要去跟踪每一步是怎么移动的,要用宏观的角度去考虑问题。要达到目的:
- 就要将n-1个盘子移动到不碍事(缓冲区)的地方。
- 再将剩下的最后一个盘子移动到目标地点。
- 再将剩下的n-1个盘子移动到目标地点
这就是汉诺塔问题的实现方法。永远只有三步。
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)