学习记录——递归
汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
目的:通过递归计算 num 片圆盘的汉诺塔从 A柱 到 C柱 的所有步骤,并记录步数
原理
第一步: 将n - 1片圆盘从 A柱 通过 C柱 移动到 B柱
第二步:将 A柱 最大的圆盘移动到 C柱
第三步:将 B柱 的n - 1片圆盘移动到 C柱
代码:
#include
using namespace std;
//汉诺塔
//目的:使用递归打印 num 层的汉诺塔从 A柱 到 C柱 的所有步骤,并记录步数
int hanoi(int num,char A, char B, char C){
int count = 0;
if (num == 1)
{
cout << "\t" << A << " --> " << C << endl;
count++;
}
else
{
count += hanoi(num - 1, A, C, B);
cout << "\t" << A << " --> " << C << endl;
count++;
count += hanoi(num - 1, B, A, C);
}
return count;
}
int main() {
cout << "请输入汉诺塔层数:";
int num = 0;
cin >> num;
cout << "———移动过程如下———" << endl;
int count = hanoi(num, 'A', 'B', 'C');
cout << "次数 = " << count << endl;
return 0;
}