(一)C语言汉诺塔问题(小白的每日总结)

这篇博客介绍了如何使用C语言解决汉诺塔问题,通过递归函数和数学归纳法进行讲解。博主强调在处理递归问题时需明确基准条件,并提供了3个盘子的解决方案作为示例。完整代码在文中给出。
摘要由CSDN通过智能技术生成

(一)C语言汉诺塔问题(入门小白的每日总结)

通过运用递归函数来实现对汉诺塔及其他一些问题的解决。

首先来讲讲递归函数
递归函数分为直接递归和间接递归。
直接递归:在一个函数的运行中自己调用自己。
间接递归:在一个函数A中调用了另一个函数B的基础上,在函数B的运行中又再此调用了函数A。

然后就要结合高中所学过的数学归纳法
举个例子来理解下:在这里插入图片描述
所以说,在做递归函数问题时,一定要先做好归纳法的分析,一步步从后往前推(如果是循环则是从前往后推)。还有要注意的是运用递归函数一定要有基准条件(有见过一些文章的说法将它称之为结束条件或者停止调用递归函数的限制条件)。
具体详解推荐看一个博客:

https://blog.csdn.net/SinvanChong/article/details/75305451?

汉诺塔问题:
古代有一个梵塔,塔内有3个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上. 有一个老和尚想把这64个盘子从A座移到C座,但规定每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下,小盘在上.在移动过程中可以利用B座.要求编程序输出移动盘子的步骤.

对于这个问题,乍看一下确实难,64个盘子,如果一个个的去划分,要把64个盘子从A座移到C座,需要移动大约2的64次方次盘子。但是这么多次到底要怎么要移动呢。从小呢我们也都知道,饭要一口口吃,路要一步步走啊。所以根据着上述理解,我从小一点的数开始推起。

假设只有三个盘子(大小程度i<j<k)
(1)k 不动,将 i 由A—》C,再将 j 由A—》B
最后可将 i 由C—》B。我们把这步总结下,就是:将 i & j 看成一个整体,将它们借助C从A—》B。
(2)将 k 由A—》C
(3)k 不动,将 i 由B—》A,再将 j 由B—》C。把这步总结下,就是&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值