汉诺塔问题(递归)

/*
问题:汉诺塔问题
解法:递归求解
思路:先把n-1从A移动B
	  在把第n个从A移到C
使用递归使得代码变得简单
复杂度:2的n次方-1
*/
#include<stdio.h>
int step = 1;
void Hanoi(int level,char A,char B,char C)
{
	if (level == 1)//(4)当柱子上只有一个盘子时,直接从A移动到C
	{
		printf("第%03d步:从%c柱移动到%c柱\n",step++,A,C);
		return;
	}
	//(1)当盘子数大于1时,先把n-1个从A借助C移动到B。
	Hanoi(level - 1, A, C, B);
	//(2)然后把最后一个从A移动到C。
	printf("第%03d步:从%c柱移动到%c柱\n", step++, A, C);
	//(3)再接着把盘子数大于1时,先把n-1个从B借助A移动到C。
	Hanoi(level - 1, B, A, C);
}
int main()
{
	int level=1;
	printf("请输入盘子数目(level>=1):");
	scanf("%d", &level);
	Hanoi(level,'A','B','C');
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_39038983/article/details/80552537