尾递归=递归+迭代?
2015-12-20 22:38
190 查看
▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
2.2 再看阶乘的递归算法:
2.3 最后看阶乘的尾递归算法:
3.2 再看斐波那契数列的递归算法:
3.3 最后看斐波那契数列的尾递归算法:
▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
0 引言
平时见惯了递归和迭代,递归直观,但太占内存和时间,迭代运算快,但是不如递归代码简洁明了。那么可不可以把这两种算法的优点糅合在一起?答案是肯定的,尾递归就提供了这样一种机制。1 尾递归是什么
简单地说,尾递归就是披着“递归”的外衣,却拥有一颗“迭代”的心。外观上看起来像递归,但内部进行了迭代的运算。下面举例说明。2 阶乘示例
2.1 先看阶乘的迭代算法:2.2 再看阶乘的递归算法:
2.3 最后看阶乘的尾递归算法:
3 斐波那契数列示例
3.1 先看斐波那契数列的迭代算法:3.2 再看斐波那契数列的递归算法:
3.3 最后看斐波那契数列的尾递归算法:
4 小结
通过示例可以看出,尾递归都是带着一个“迭代变量”不断向深处递归,相当于边递归,边计算,等递归完成时,结果也计算出来了。值得一提的是尾递归只是借了递归的外壳,本质还是在迭代,所以在效率上,应该是与迭代相仿的。▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
相关文章推荐
- project euler 89
- Head First Java目录
- 【cocos2d-x 3.x 学习与应用总结】2: 在cocos2d-x中使用ccbi
- XML文件更改插入
- java使用多线程实现生产者消费者问题
- 国内打不开onedrive,怎么办?
- Java随笔
- Eclipse之新建Activity自动导入v7包导致报错的问题
- 基金从业相关笔记
- CGI、FastCGI、PHP-CGI和PHP-FPM 概念区分
- Python基础----数据变量和变量
- 基于C++高性能、跨平台日志模块的分析与实现
- Implicit declaration of function '*****' is invalid in C99
- iOS 适配/ autoLayout基本知识
- [异常解决] ubuntu上安装虚拟机遇到的问题(vmware坑了,virtual-box简单安装,在virtual-box中安装精简版win7)
- Unity3D 为什么Transform.Translate 中的x/y/z值经常会通过speed * Time.deltaTime获取?应该这样的
- 用二级指针删除链表
- LVM
- Javascript实现继承的理解
- Bitnami VM虚拟机 GitLab8.1.4 使用笔记