美文网首页
揭秘-栈和递归的关系

揭秘-栈和递归的关系

作者: 始于尘埃 | 来源:发表于2019-05-18 17:11 被阅读0次

    我与数据结构有个约会,带你领略不一样的数据结构!

    /*
    栈最常见的应用就是递归,那么递归的实现机理是什么?他的优缺点有事什么?
    我们以斐波那契数列为例:

    斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,
    故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:
    F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
    */

    #include <stdio.h>
    #include <stdlib.h>
    
    //先用循环实现,打印前30位
    void f(){
        int i;
        int a[30]={0};
        a[0] = 0;
        a[1] = 1;
        printf("%d\n",a[0]);
        printf("%d\n",a[1]);
        for(i=2;i<30;i++){
            a[i] = a[i-1] +a[i-2];
            printf("%d\n",a[i]);
        }
        
        
    }
    
    //递归实现
    int Fbi(int i){
        if(i<2)
            return i == 0? 0:1;
        return Fbi(i-1) + Fbi(i-2);//调用自己
    
    }
    
    int main(){
        //f();
        int i;
        for(i=0;i<30;i++){
            printf("%d\n",Fbi(i));
        }
        system("pause");
    
        return 0;
    }
    

    /*
    递归调用相关问题:
    1、每一个递归都可以用循环(迭代)实现,递归通常代码简洁,而循环显得冗长
    2、递归并不常用,因为:大量的递归调用需要建立函数副本,会消耗大量的时间和内存。迭代则不需要反复调用函数和占用额外的内存。
    因此,在递归次数很多的情况下,并不建议采用递归(有可能会死机)
    */

    相关文章

      网友评论

          本文标题:揭秘-栈和递归的关系

          本文链接:https://www.haomeiwen.com/subject/qyitzqtx.html