汉诺塔问题 递推算法实现 (Tower of Hanoi)
汉诺塔是一个源于印度古老传说的益智玩具。据说大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘,大梵天命令僧侣把圆盘移到另一根柱子上,并且规定:在小圆盘上不能放大圆盘,每次只能移动一个圆盘。当所有圆盘都移到另一根柱子上时,世界就会毁灭。
这里实现了汉诺塔的递推算法,并与汉诺塔问题的简单递归算法进行比较 可见结果完全相同
为什么用递推算法?
相比容易实现的递归算法,递推算法可以方便控制占用的栈空间大小,防止爆栈,省去了函数调用的时间花费。
几乎所有的递推算法,都可以通过栈来模拟,以转化为递推算法。
#include<iostream>
#include<stack>
using namespace std;
void move(char start,char dist)
{
cout<<start<<"->"<<dist<<endl;
}
//a表示起始柱 b表示辅助柱子 c表示目的柱
//递归算法
void hanoRecursion(int n,char a,char b,char c)
{
if(n==1)
{
move(a,c);
return;
}
hanoRecursion(n-1

本文介绍了汉诺塔问题的传统递归算法,并通过递推算法的栈模拟实现,以减少空间消耗和避免爆栈,展示了递推算法在控制资源使用上的优势。
最低0.47元/天 解锁文章
7836

被折叠的 条评论
为什么被折叠?



