汉诺塔问题



思路:先把个小的圆盘移动到另一个桩上(需要次),再移动最大的圆盘(需要次),最后将个小圆盘移到最大圆盘上(需要次)。


关键词: 数学归纳法(mathematical induction)

C++实现汉诺塔移动步骤显示

#include <iostream>
using namespace std;
int g_cnt = 0;

void Move(char src, char dst)
{
    cout << src << "->" << dst << endl;
    ++g_cnt;
}

void Hanoi(int n, char src, char tmp, char dst)
{
	if (n == 1)
	{
		Move(src, dst);
		return;
	}
	Hanoi(n-1, src, dst, tmp);
	Move(src, dst);
	Hanoi(n-1, tmp, src, dst);
}

int main()
{
	int n;
	cin >> n;
    Hanoi(n, 'A', 'B', 'C');
    cout << g_cnt;
    return 0;
}