现在的位置: 首页 > 综合 > 正文

这么认识递归,你会恍然大悟!如果你已经很透彻理解递归请飘过~

2019年04月23日 ⁄ 综合 ⁄ 共 1099字 ⁄ 字号 评论关闭

递归算法概念是函数调用自己来实现的某种功能,按以下方法理解递归你会恍然大悟(如果你对递归有疑惑的话),并

觉得递归是如此简单:

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.以上都是个人一己之见,有错误或者不当的,欢迎吐槽!




抱歉!评论已关闭.