浅析递归
递归是一种绝大多数语言都支持的编程方式。但是我本人并不建议使用。
1.是什么?
1.1 释义
允许函数循环调用自己的过程
1.2 原理
- 每级函数调用都有自己的变量
- 每次函数调用都会返回一次
- 递归函数中位于递归调用之前的语句顺序执行
- 递归函数中位于递归调用之后的语句逆序执行
- 每级递归都有自己的变量,但并不会拷贝函数代码
- 递归函数必须有让递归调用停止的语句,否则将无限递归
2.为什么?
2.1 优点
递归的代码简洁优雅。繁杂的执行过程交由操作系统辅助解决。
2.2 缺点
相较于其优点,缺点更加显而易见,由于函数每次递归调用自己时,操作系统都要为其保留函数的运行现场(俗称系统栈),这种系统级的开销会浪费较多的资源,因而代码的效率并不高。而且还不方便人们的阅读,难以理解。
3.怎么做?
Talk is cheap,show you the code.
3.1 普通递归
1 | /* |
3.2 尾递归
递归调用在主函数的return语句之前。尾递归形式简单,相当于循环。
1 |
|