汉诺塔问题是一个古典的数学模型,是一个用递归问题解决的典型例子,问题如下:古代有个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不定,大的在下,小的在上。有一个老和尚想把这64个盘子

汉诺塔问题是一个古典的数学模型,是一个用递归问题解决的典型例子,问题如下:古代有个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不定,大的在下,小的在上。有一个老和尚想把这64个盘子从A移到C,但规定一次只能移动一个盘子,且在移动过程中在3个座上始终保持大盘在下,小盘在上,在移动过程中可利用B座。

*C 为目的基座
将n个盘子看成两部分,前 n-1 块看作一个整体,和 第 n 块
此时移动盘子只需要三步
1、需要把 前 n-1 块这个整体 从 A 移动到 B 上。此过程需要借助C ,即 A — C—> B

2、在将第n块 从 A移动到 C 。

3、最后将前 n-1 块这个整体 从 B 移动到 C 上。此过程需要借助 A ,
即 B — A —> C*

#include
#include
#pragma warning ( disable:4996)

void hanoi(int n, char A, char B, char C)
{
	if (n == 1)
	{	
		// n == 1时,只剩下最后一块,只需将其 从 A移动到目的位置 C 上
		printf("%c——>%c\n",A,C);
	}
	else{
		

		//前 n-1 块需要移动到B,

		//在此过程中,需要先借助C位置,才能将 前n-1块 从A ——>B
		// A — C —>B , 从 A 借助C 移动到B
		hanoi(n-1, A, C, B); 
		printf("%c——>%c\n", A, C);

		// 将前n-1 块 ,从 A移动到 目的基座C ,
		//B — A —> C ,从 B 借助A 移动到C
		hanoi(n - 1, B, A, C);
			
	}


}
int main()
{
	
	int n = 0;
	printf("输入盘子个数:");
	scanf("%d", &n);
	hanoi(n,'A' , 'B', 'C');
	system("pause");

	return 0;
}

你可能感兴趣的:(c语言习题)