如下图,谁能解释下面输出内容的意思
def move(n, a, b, c): if n == 1: print a,'-->', c return move(n-1,a,c,b) print a,'==>', c move(n-1,b,a,c) move(2, 'A', 'B', 'C') A --> B A ==> C B --> C
2016-03-24
汉诺塔的递归问题,特别容易被 参数名 给弄混淆,这个问题可以分为两部分来说:
首先,这是一个递归问题,递归问题的思路都是一致的:
首先,递减递归,其次做边界判断。 递减调用:就是题主代码里的第5行,第7行代码; 边界判断: 第2行的if判断。
其次这是一个汉诺塔问题,汉诺塔的问题,就是在除了初始柱外,依次放入次大底盘,且依次从初始柱解放最大底盘,这个问题代入递归的话就需要以下思路:
反向思考,从最简单的只有两个盘子考虑,而后依次递增。 一个盘子的话就是会直接进入if判断,也没什么可以考虑的。
最后说下,汉诺塔的递归思路中最易混淆的“参数名”,在此只做一次说明,在第5行调用
move(n-1,a,c,b)
这次调用move函数时:执行到第6行:
print a,'==>', c
打印的是:
A --> B
想明白这些,然后从只有三个盘子去套用函数,应该就能明白了,如果还不明白,也不是我打字能说明的了。
举报