题目详情我就不描述了,很经典的问题,然后问题是,用递归来做是很好理解,很顺理成章的问题,但是用非递归,对我来说感觉很别扭,断断续续看了两个都领悟,网上对于非递归的方法其实也说的不清不楚,也可能是我比较笨,我尝试讲一下我的理解。
首先理解什么是汉诺塔,可以看这个视频:「递归练习」汉诺塔
看完之后,然后可以列一下汉诺塔的解法:
盘数 | 解法 |
1 | a->c |
2 | a->b a->c b->c |
3 | a->c a->b c->b a->c b->a b->c a->c |
4 | 略 |
1、将0到n-1盘从a移到b;
2、将第n盘从a移到c;
3、最后把0到n-1盘从b移到c;
在程序中就是,慢慢将n-1分解,直到1。
那么用非递归方法利用就是堆栈