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

发布于:2021-06-21 10:19:25

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


觉得递归是如此简单:


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







相关推荐

最新更新

猜你喜欢