当前位置:编程学习 > VB >>

vb汉诺塔非递归算法

自己做了个汉诺塔的游戏,想让他自动模拟过程,用了递归方法结果是堆栈空间溢出,网上又没搜到好的解释的。先来这里请教大家!麻烦尽量解释清楚,因为我是在学习,不是用用而已!!
补充:额……我这个我知道的,所以我是来寻求一个非递归的算法!!
答案:
碟子移动规则:
1)如果碟子总数是奇数,则第一个碟子移动到3号柱上;否则移动到2号柱上

2) 如果3号柱子还没有放满碟子,则反复执行3),直至所有碟子都被正确放置。

3) 下次移动的碟子根据前一个移动碟子编号的奇偶确定:(编号从1开始。最小的碟子是1号)
--如果上次移动碟子编号为偶数,则下次移动的目标柱不变,来源柱改变
--如果上次移动碟子编号为奇数,则本次移动的目标柱不参与移动;比较另外两柱子上碟子编号,把小碟移动到大碟上。(如果另外两个柱子其中有一个没有碟子,则把另一个的最上层碟子移动给它)
用递归调用的其实就是在函数体里面有调用了本身,那么在调用的过程中,调用者(也就是原来的函数)在内存(堆栈)中所占用的空间依然存在,那么当递归一级一级的调用下去,系统就会自动的为它一级一级的分配内存空间直到最终找到结果,递归结束,所占用的内存也将全部释放。问题就在这里,递归是反复调用的,相当于代码的自动增长,如果计算量特别大的话,相当于代码好长好长,那么内存肯定是要溢出的.

上一个:求个VB专题网页
下一个:谁可以教我用VB?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,