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

揭秘-栈和递归的关系

作者: 始于尘埃 | 来源:发表于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、递归并不常用,因为:大量的递归调用需要建立函数副本,会消耗大量的时间和内存。迭代则不需要反复调用函数和占用额外的内存。
因此,在递归次数很多的情况下,并不建议采用递归(有可能会死机)
*/

相关文章

  • 揭秘-栈和递归的关系

    我与数据结构有个约会,带你领略不一样的数据结构! /*栈最常见的应用就是递归,那么递归的实现机理是什么?他的优缺点...

  • 算法图解系列之递归[03]

    3 递归 3.1 递归<函数> 3.2 基线条件和递归条件 3.3 递归调用栈

  • 第三章:递归

    递归 盒子里面找钥匙 基线条件和递归条件 栈 调用栈 调用另一个函数时,当前函数暂停并处于未完成的状态 递归调用栈...

  • 2020-03-29

    对于二分查找,对比递归和非递归的执行效率,理解递归调用中,压栈和弹栈也是有时间开销的。 对模糊区间查找,随机查找,...

  • 树-三大遍历

    三种遍历都有递归、栈、循环三种方式,其中,递归最为简单,栈次之,循环最为麻烦。递归的深度如果太大则会导致栈溢出;栈...

  • leetcode 94 二叉树中序遍历和 leetcode 14

    leetcode 94 使用栈,非递归解法: leetcode 144 使用栈,非递归解法:

  • 递归(recursion)

    基线条件(base case)&递归条件(recursive case) 递归条件基线条件 堆栈 调用栈 递归调用栈

  • 仅用递归函数和栈操作逆序一个栈

    递归函数一:将栈stack的栈底元素返回并移除 递归函数二:逆序一个栈

  • 如何仅用递归函数和栈操作逆序一个栈

    3.如何仅用递归函数和栈操作逆序一个栈 题目: 解题:

  • 递归和调用栈

    递归 一个简单的递归阶乘 斐波拉契数列 压栈/计算次数过高 如何降低压栈/计算次数 压栈:需要调用栈里记录“回到哪...

网友评论

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

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