算法课作业整理——02汉诺塔问题(openjudge)——C++

本文介绍了汉诺塔问题的C++解决方案,重点解析递归思路。作者强调理解递归的重要性,并解释了为何代码中特定的递归形式。文章提供了一个清晰的三步过程,通过实例帮助读者理解递归函数的运作方式,并附带完整代码供读者参考。
摘要由CSDN通过智能技术生成

题目描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
https://blog.csdn.net/geekwangminli/article/details/7981570
https://www.cnblogs.com/yanlingyin/archive/2011/11/14/2247594.html
(两篇博客都写的非常棒,第一篇博客的博主写的很详细,讲的老和尚的故事;第二篇博客的博主用了另外一种理解思路,都建议去学习一下,不然可能看不懂我写的)

结果展示:

在这里插入图片描述
思路:
    我一直信奉代码越简洁、规整,越好;递归真的满足了我的需求。网上很多了写这个,但我老是会有疑问,为啥会这么写呢?它只会告诉我这个东西是什么,却不告诉我为什么,我觉得对我而言,在理解的基础上记忆,才是比较好的学习方法,废话不多说,下面开始讲正题。
    题目的要求是输出每一步盘子移动的记录,而设置的Move()函数其实只是一个打印printf(),并没有真正地移动(这步我想了好久才理解),因为题目要求也只是要求你输出盘子的移动记录。
    hanoi()函数应该怎么写,别人都已经写的很详细了,我就不赘述了,我只讲讲不一样的地方。以n=3时, 三个柱子分别为a b c为例。
    首先写递归,必须写终止条件,不然程序就陷入死循环了。所以有了限制条件:

if(n==0) return;

    然后是hanoi()函数里的3步,因为hanoi()定义的是

hanoi(int n,char poleStart,char poleTemp,char poleGoal)
{
   
   hanoi(n-1,poleStart,poleGoal,p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值