有关汉诺塔函数递归的问题

汉诺塔的简单介绍

这里以三阶的为基本规则介绍,把全部环从A(起始柱)移动到C(目标柱),且大的环始终要在小的环之下。用c语言体现解汉诺塔过程。

汉诺塔的思路体现

有关递归的思想

一个n阶的汉诺塔可以化为n-1阶,n-2 ..... 1阶来解开 。比如说3阶的就可以化成2个2阶的,2个2阶的又可以化成4个1阶的来解。 比如说解开一个2阶的汉诺塔其实就是解开2个1阶的汉诺塔。都是从最低层开始拿。

基本解法步骤

1.把(n-1)个从起始柱拿开 通过目标柱 移动到中转柱上。

2.把第n个从起始柱移动到目标柱上。

3.把n-1个移动到目标柱子上。 

在这几步期间 起始柱 ,中转柱 ,目标柱 其实都是相对的,可以互相转换的。都是相对的。

3阶汉诺塔解法的代码体现

void move(int n, char A, char B, char C)
///A为起始柱 B为中转柱 C为目标柱
{
	if (n == 1)
	{
		printf("%c->%c\n", A, C);
	}
	if (n >= 2)
	{
		move(n - 1, A, C, B);
		printf("%c->%c\n", A, C);
		move(n - 1, B, A, C);
	}
}
int main()
{
	int n;
	scanf("%d", &n);
	move(n, 'A', 'B', 'C');
	return 0;
}

这里把形式参数和实际参数设置为了同名好辨认。

传入参数 阶数 三根柱子。以体现解法。

部分代码解析

printf("%c->%c\n", A, C);其意思是打印A->C 意是从A移动到C上,故之后的移动都得用char A ,char C来移动 。像下一次调用move(n - 1, A, C, B); 就得让B当为目标柱来传传到char C中,因为最终n-1个是要到B柱子上的。

move(n - 1, A, C, B); 其意思是把n-1个环 从A通过C移动到B上。为把(n-1)个从起始柱拿开 通过目标柱 移动到中转柱上的体现。

printf("%c->%c\n", A, C);把第n个从起始柱移动到目标柱上。

move(n - 1, B, A, C);把n-1个移动到目标柱子上。

总结

以上就是汉诺塔的基本思路 ,如果有什么错误 和 不懂的可以私信我。 本人也是初学者还望大佬们多多指教,以上也是个人的一些想法和解法思路。

天若有情天亦老,人间正道是沧桑

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值