数据结构——汉诺塔

学习记录——递归

汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

目的:通过递归计算 num 片圆盘的汉诺塔从 A柱 到 C柱 的所有步骤,并记录步数

原理

        第一步: 将n - 1片圆盘从 A柱 通过 C柱 移动到 B柱

数据结构——汉诺塔_第1张图片

         第二步:将 A柱 最大的圆盘移动到 C柱

数据结构——汉诺塔_第2张图片

 第三步:将 B柱 的n - 1片圆盘移动到 C柱

数据结构——汉诺塔_第3张图片

 代码:

#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;
}

你可能感兴趣的:(数据结构,c++)