对汉诺塔的理解

我发现递归真是一个神奇而又伟大的东西。

1.先说一下我对递归的理解:

理解递归要分两步:写出递归和验证递归

我觉得前者比后者容易许多

写出递归:只需要考虑最简单情况和最初始情况,至于如何层层调用,他的中间过程不需要深度考虑

                 些递归函数时分类讨论十分重要,要有最简单情况(可能多个),和需要调用自身的情况

只想第一步如何做就差不多了,第一步分好的子块就交给程序自己执行就好

验证递归:需要理解每一步,包括子块,子块的子块。。。程序是如何运行的

让大脑模拟程序的执行想通整个过程的每一步是比较困难的

为了不会思维凌乱,要牢记规则,把栈画出来

规则:念出来,顶为当前正在执行的,顶的反址是下面的cell

  语句标号,执行后回到前一个栈的该标号位置继续执行前一个栈,

        当某一层函数完全执行完了才出栈

eg.回到3,a,b,c所在的第五行开始执行


所以说,要是想快速写出递归函数就不要想“验证递归的过程”,只想第一步就好,后面的交给程序自己执行

2.对汉诺塔的理解:
汉诺塔是对递归的应用

(hannoi函数代表把多个整体移动,因为不现实,所以要把规模缩小到可以用move,move一次只移动一个盘子)

先想如何从初始状态利用规则直接变成目标状态?s1.把前n-1个先移到中间柱,s2.再把第n个移到右柱,s3.最后把n-1个也移到后柱,如语句4-6

而s1,s3不现实,然后就要想我要怎么才能把n-1个先移到中间柱(新的目标状态)(如何达到新的目标状态),怎么才能把n-1个也移到后柱(新的目标状态)?这时问题的规模就缩小了,而规则还是没变,所以可以使用递归完成,。。。。。一直缩小规模直到能move


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值