这么认识递归,你会恍然大悟!如果你已经很透彻理解递归请飘过~
来源:互联网 发布:淘宝客佣金查看 编辑:程序博客网 时间:2024/04/30 15:38
递归算法概念是函数调用自己来实现的某种功能,按以下方法理解递归你会恍然大悟(如果你对递归有疑惑的话),并
觉得递归是如此简单:
1.递归是高中数学中的数列那一章讲的内容。数列这章讲了一个概念叫递推公式:如果已知数列的第1项(或前几项),且从第二项(或某一项)开始的任一An与它的前一项An-1(或前几项)间的关系可以用一个公式来表示,那么这个公式就叫递推公式,递推公式是给出数列的一种方法。
2.例如斐波那契数列的递推公式就是:An=An-1+An-2(n>2,a1=1,a2=1)
3.那么现在如果想用递归的方式表示斐波那契数列即可定义函数f(n):当n>2时f(n)=f(n-1)+f(n-2);当n=1时f(n)=1,当n=2时f(n)=1;
即private static int fibonacciRe(int i) {
if(i == 1 || i == 2)
return 1;
else if(i>2)
return fibonacciRe(i-1)+fibonacciRe(i-2);
else
return 0;
}
4.解释:其实说白了递归函数就是一个递推公式,只要递推公式往纸上一写,把项A替换成函数名字,把n替换成函的参数即可,最后用if处理一下特殊参数值时的结果值就欧了。
5.总结:我们为什么有些人很难理解递归函数呢,我个人觉得是我们在学计算机语言的时候都是在大学里学的,然后此时的高中数学知识已经忘却了,取而代之的是我们把我们的大脑陷在了递归方法调用的过程中了,比如,要一步步该怎么调用了。如果我们要结合高中数学中的这个概念的话就一点也不难理解递归,反倒觉得递归的算法一眼看去就很明白,我个人以前难于理解递归是因为只要我看到了递归我的脑子就在循环的一层层的往下继续调用,觉得很难理解,其实我们完全不要去想那一层层的调用关系,反而想到递归就把他抽象出来一个递推公式,这样你就会恍然大悟的感觉,原来递归如此简单。我们以前不好理解递归是我们自己的给自己制造了理解它的障碍。觉得理解这个就跟用眼在电脑上看懂三维立体画有异曲同工之妙。现在如果只要给你在纸上写出了一个递推公式,你立马就可以用递归函数写出来。呵呵。。递归是不是很简单呢?!其实我们的计算机算法都来源于数学,计算机算法是数学应用于生产的很好的一个例子!
6.附:斐波那契数列的非递归算法,由于递归很耗资源,所以不到迫不得已尽量不要用递归算法
public static int z(int n){
int a=1;
int b=1;
int c=0;
for(int i=3;i<=n;i++){
c=a+b;
a=b;
b=c;
}
return c;
}
7.以上都是个人一己之见,有错误或者不当的,欢迎吐槽!
- 这么认识递归,你会恍然大悟!如果你已经很透彻理解递归请飘过~
- 如果你已经过了20岁但还不到25岁,请一定要看看这篇文章
- 如果你已经过了20岁但还不到25岁,请一定要看看这篇文章
- 做人的底线如果你经历过你会流泪
- 要理解递归,你需要先理解递归……
- 要理解递归,你先要理解递归(转载)
- 周星驰,你别这么贬低自己好嘛,你已经很努力了!
- 如果你已经20岁了,请好好看这篇日志
- 如果你已经过了20还不到25岁
- 学习递归,理解递归
- 利用递归实现排列让我哥恍然大悟
- 理解递归
- 理解递归!!
- 理解递归
- 理解 递归
- 递归理解
- 理解递归
- 理解递归
- Photoshop脚本 > 打开一个存在的文档
- ios UITextView中return key点击事件的监听方法
- Sublime Text2安装Package Control
- 第四章字符串与多维数组 思维导图
- 第十一周项目 4 银行系统的不一般的完善,(超好玩O!)
- 这么认识递归,你会恍然大悟!如果你已经很透彻理解递归请飘过~
- 11.17行情分析
- 数据存取
- Photoshop脚本 > 打开文件夹中所有文档
- bash系统变量
- 【Linux C 程序设计】(一)基础知识
- IAR软件不能使用Go to definition ...功能
- Verilog HDL编写SPI Slave通信
- POJ 3160 Father Christmas flymouse 强联通