C语言之汉诺塔递归

汉诺塔递归算法思路:

1. 如果只有一个盘子,那么直接从柱子1移动到柱子3

2. 如果有 >1 个盘子,那么先把 n-1 个盘子从柱子1移动到柱子2   (想要让最底下一个移动到从柱子1移动到柱子3,一定会有这一步骤,就是除了最底下的那个柱子,其他都按照顺序排列在柱子2中) 再把第n个盘子从柱子1移动到柱子3,最后再把n-1个盘子从柱子2移动到柱子3

 

ount = 1;
void han(int n,char* a,char* b,char* c)
{
	if (n == 1)
	{
		printf("%d:%s -> %s\n", count, a, c); // 当n==1的时候,直接从柱子1移动到柱子3

	count++;
}
	else
	{
		han(n - 1, a, c, b);// 第一步需要把 n-1 个盘子从 柱子1 借助 柱子3 移动到 柱子2
		printf("%d:%s -> %s\n", count, a, c);// 第二步把 柱子1 剩下的最大的那个从 柱子1 移动到 柱子3
		count++;
		han(n - 1, b, a, c); // 第三步把 柱子2 中的 n-1 个盘子从 柱子2 借助 柱子1 移动到 柱子3


	}
}
int main()
{
	int n = 0;
	printf("请输入汉诺塔的盘子数:");
	scanf("%d", &n);
	han(n, "柱1", "柱2", "柱3");
	return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天乐敲代码

你的鼓励将是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值