【再谈递归】递归理解了,该如何去写程序
如果你理解了递归,那么你就成功了一半
递归分为两个部分,“递”和“归” 递归递归先递再归。
可能很多同学对递归还不了解,那我在这里来说一说:何为递归。
何为递归?
递归指的是在函数(方法)的定义中使用函数(方法)自身的方法。 举个例子: 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?“从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?‘从前有座山,山里有 …
所以,递归的特点之一:函数自己调用自己
不过像上述“老和尚讲故事”的案例,通常称为 单程递归 (这个概念来自于 刘慈欣的《星际战争》第11章),所谓单程递归,就是没有返回的递归,也就是只有递,没有归。
如何理解递归
众所周知,在一个函数(方法)被调用时,会开辟一个新的空间,而在递归时,函数调用自己,也会新开一个空间,而每当新开的空间内函数调用完毕时,会将值返回给上一个空间,无限重复调用,直到找到基准为止(我对于内存空间的研究有限,可能说的不太对,不过也是为了便于大家的理解)
用递归写个斐波那契,大家都很好想像,不过用递归来写排序呢?快速排序可能还好点,如果是归并,给人的感觉就有点抽象了
快速排序
归并排序
要是每一次自行模拟的时候,都带进去,人不累死,脑子都得晕死。
所以,如何用好递归?
用好递归
前面说到,递归是有返回值的,所以,我们在写递归的时候,不妨设它是一个已经写好了的函数,我们只需要知道他返回的结果是多少不就可以了吗。
下面以斐波那契数列为例(万能的斐波那契,赐予我力量吧!)
调用fib(n-1)+fib(n-2)时,我们如果带进去算,会陷入循环中,循环到底回来的时候,还要记录返回值,对于计算机来说,有手就行,但对于我们普通人来说,特别绕(特别是当输入的n很大时),我们不妨假设已经知道它的返回值来运行,再进行调试,这样的话,便不会陷入头晕目眩的恶性循环。
相关文章
- 面板工具 v2board被黑,梯子承受了压力
- Apache ShardingSphere在转转亿级交易系统落地实践
- 第3章 让场景动起来
- 将爱心代码设为电脑屏保,俘获少女芳心,还能假装黑客大佬,在酷炫的界面中保护隐私
- Ubuntu 桌面系统升级
- 基于A股供应链网络的股票收益分析
- VS Code 扩展开发如何保持用户视觉体验一致
- ChatGPT 常见错误原因及解决方案:报错、回答不完整等
- 软件测试|HTTPS 原理以及fiddler解密
- ChatGPT 大智近妖,从宇宙人生到手搓光刻机,从哄女朋友到写年终总结我们聊得非常开心,反而让人越来越忧心
- 实测 ChatGPT 编程效果被其发现,这波我先站队 Stack Overflow
- flutter系列之:flutter中listview的高级用法
- 小游戏引擎如何选?看完这篇就够了
- 软件测试|UI遍历的初步尝试
- 接口自动化测试如何处理 Header cookie
- 软件测试|使用 cURL 发送请求
- 分布式系统性能调优: 一篇彻底搞定JMC定位JVM性能问题
- 软件测试|Session、cookie、token的区别
- 干货 | 最全的CTF练习网站和在线攻防网站总结
- 干货 | 域内敏感信息搜集