汉诺塔是常见的一种用递归思想去解决的问题,其主要思路如下:
汉诺塔中有n个圆盘,将第1个到第(n-1)个看成一个盘,由于(n-1)盘上面的盘都比这个盘要小,所以用(n-1)的盘代替上面所有盘进行移动,所以只有两个盘子在汉诺塔上的移动是A->B,A->C,B->C,n盘到达最终位置后,对之前(n-1)盘再次进行类似于n盘的一样的操作。直到n为1时停止,递归结束。
代码如下:
#include<iostream>
using namespace std;
int cowunt = 0;
void hannuo(int num, char src, char temp, char dst);
int main()
{
char src = 'A';
char temp = 'B';
char dst = 'C';
hannuo(4, src, temp, dst);
cout << "次数:" << cowunt << endl;
system("pause");
return 0;
}
void hannuo(int num, char src, char temp, char dst)
{
if (num == 1)
{
cout << "将圆盘" << num << "从" << src << "-->" << dst << endl;
}
else
{
hannuo(num - 1, src, dst, temp);
cout << "将圆盘" << num << "从" << src << "-->" << dst << endl;
hannuo(num - 1, temp, src, dst);
}
cowunt++;
}