递归
来源:互联网 发布:切纸机无刀后数据 编辑:程序博客网 时间:2024/06/08 18:23
递归的定义是:A function defined in terms of itself is called recursive. 也就是说一个函数的定义需要用到这个函数的本身。递归是一个很奇妙的思想,从上面的定义看去,递归貌似一个死循环,这个当然是不对的,递归总会有一个结束的条件,也就是基准情况,这个基准情况规定了递归什么时候结束。下面来看一个例子:
计算阶乘n! = n*(n-1)*...*1.
如果利用递归思想的话,我们可以发现factorial(n) = n!=n*factorial(n-1);这就是一个递归的形式。
int factorial(int n){if(n==1)return 1;elsereturn n*factorial(n-1);}代码的第二行与第三行就是处理的基准情形。这是由于这个基准情形,使得程序不会变为死循环而不停的递归,直至耗尽内存空间。
当然上面的情形也可以用迭代的方法来解决
int factorial(int n){int element = 1;int i;for(i=2;i<n;i++)element *=i;}
递归和迭代一般情况下是可以相互转换的,但是有些情况下,用迭代来替代递归是相当痛苦的,比如说数据结构的定义等等。
递归一般有如下几点需要注意:
1) 基准情形:也就是递归停止的标志,这是递归所不能少的
2) 不断推进:每一次递归,都要使问题朝着基准情形前进,否则是无法结束递归的
3) 设计法则:假设所有的递归调用都能运行
4) 合成效益法则:在不同的递归调用中解决同一个问题,不应该复制已有的工作。
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- Secret of oracle logic IO: Consistent Gets
- 系统调用的实现及调用过程
- 百度地图Android定位SDK的API
- javascript中的document.getDocumentById返还null
- C++ 用set容器过滤插入到map容器中的元素
- 递归
- Myeclipse中相同变量高亮显示
- autocomplete 参数说明
- 一个MongoAlchemy的例子
- R-quantile()
- 很幽默的讲解六种Socket IO模型(转)
- Android开发学习笔记:浅谈WebView
- 我对嵌入式底层开发学习的一点看法
- 联系人API 的各种表结构