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