汉诺塔的非递归算法看的确实比较累,先看看递归算法。。精妙之处让人惊叹啊。
递归只关心起始地,目的地,方法,不关心中间过程。。比如把一号部分通过3号到达2号。。不用管具体的调用过程。。
附上本人PS过的源代码:
#include <iostream>
#include <string>
using namespace std;
void move(char getone,char putone);
void hanoi(int n,char one,char two,char three);
static int sum;
void main()
{
int m;
cout<<"input the number of disks:";
cin>>m;
cout<<"the step to move "<<m<<" diskes:"<<endl;
hanoi(m,'A','B','C');
cout<<"sum="<<sum<<endl;
}
void move(char getone,char putone)
{
cout<<getone<<"-->"<<putone<<endl;
sum++;
}
void hanoi(int n,char one,char two,char three)
{
if(n==1)
{ move(one,three);
}
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
运行结果:sum为一共执行了几步.
。。。