C语言--汉诺塔问题(递归应用)

一,游戏规则

要想运用函数递归思想写出代码,首先得弄明白规则是什么。如图1(假设圆盘有三个)

图1

A柱上有小中大三个圆盘按顺序摆放,要求把三个圆盘转移到C柱上,并且在移动过程中,较小的圆盘始终要在较大的的圆盘上。不能出现如图二所示的情况。

图2

最终达到如图三所示的效果

图3

二,思路分析

第一步:首相将小圆盘放到C柱上,然后再将中圆盘放到B柱上,接着再把小圆盘放到b柱上。如图4

图4

第二步:将大圆盘放到C柱上,再将小圆盘放到A柱上。如图5

图5

第三步:按照从大到小的顺序依次把圆盘摆放到C柱上,达到目的。如图6

图6

三,规律探索

通过观察步骤总结出

  1. 先把除去最下面以外的圆盘借助C柱移动到B柱。

  1. 然后把最下面的的圆盘移动到C柱。

  1. 最后让B柱上的圆盘借助A柱移动到C柱。

那么如果此时有n个圆盘,可以分成第n个圆盘和上面n-1个圆盘,然后上面n-1个圆盘又可以分成第n-1个圆盘和上面n-2个圆盘,以此类推,直到最后上面没有圆盘(即只剩下一个原盘)时,直接将这个圆盘放到C柱上即可。

我们把上面提到的三个步骤设计成一个函数,不妨设为hanoi(n,x,y,z)(其中的xyz仅仅代表三根柱子的位置),依次完成三个步骤,思维导图如图7。

图7

四,函数书写

代码如图8

图8

注:这里的printf打印步骤对应的思维导图中的move。

  • 15
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

偷吃橙子的喵

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

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

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

打赏作者

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

抵扣说明:

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

余额充值