(C++) Hanoi(汉诺)塔问题(递归算法)。

(C++) Hanoi(汉诺)塔问题(递归算法)。这是一个经典的数学问题;
古代有一个梵塔,塔内有三个座A,B,C,开始时A座上有64个盘子,盘子大小不等,
大的在下,小的在上,有一个老和尚想把这64个盘子从A座移到C座,但每次只允
许移动一个盘子,且在移动的过程中在三个座上始终保持大盘在下小盘在上。移
动的过程可以利用B盘,要求编写程序打印移动的步骤。

#include
using namespace std;
/*Hanoi(汉诺)塔问题。这是一个经典的数学问题;
古代有一个梵塔,塔内有三个座A,B,C,开始时A座上有64个盘子,盘子大小不等,
大的在下,小的在上,有一个老和尚想把这64个盘子从A座移到C座,但每次只允
许移动一个盘子,且在移动的过程中在三个座上始终保持大盘在下小盘在上。移
动的过程可以利用B盘,要求编写程序打印移动的步骤。*/
int main() {
	//递归算法
	void hanoi(char,char,char,int);
	char x = 'A', y = 'B', z = 'C';//三个底座
	int n;
	cout << "input n:" << endl;
	cin >> n;
	cout << "the step of"<<" " << n << " " <<"disk" << " moving:" << endl;
	hanoi(x, y, z, n);
	return 0;
}
void hanoi(char x, char y, char z, int n) {
	void move(char, char);
	/*
	整个hanoi函数只有当n = 1时才会执行移到盘子的动作;
	其他情况下会采用递归形式,调用函数本身,经过不断的(n - 1)后,最后会在一个盘子的情况下进行移到,以此类推。
	*/	
	if (n == 1) {
		move(x, z);
	}
	else {
		hanoi(x, z, y, n - 1);//将n-1个盘子从A座借用C座移动到B座
		move(x, z);//将A座的最大盘子移到C座
		hanoi(y, x, z, n - 1);//将B座的n-1个盘子从B座借用A座移动到C座
	}

}
void move(char x,char y) {
	cout << x << "->" << y << endl;
}

你可能感兴趣的:(C++合集,c++,算法,开发语言,递归算法)