首页 > 其他分享 > fibnacci数列递归实现

fibnacci数列递归实现

时间:2023-11-05 22:12:11浏览次数:31  
标签:数列 递归 fibnacci Fib gdb fibonacci

目录

1. fibnacci数列

2. fibnacci数列的递归表达式

F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)

3. C语言

由于递归算法的特性,当计算较大的Fibonacci数列,如Fib(100)、Fib(1000)和尤其是Fib(10000),递归方法会变得极其低效,因为它会产生大量的重复计算,导致指数级的时间复杂度,使计算时间非常长甚至超过计算机的可接受范围。所以一分钟内计算出Fib(10000)是不太可能的。

4. 用GDB查看递归的堆栈情况

点击查看代码
$ gdb ./fibonacci
(gdb) break fibonacci
Breakpoint 1 at 0x1123: file fibonacci.c, line 4.
(gdb) run
Starting program: /path/to/fibonacci 

Breakpoint 1, fibonacci (n=10) at fibonacci.c:4
4           if (n <= 1) {
(gdb) bt
#0  fibonacci (n=10) at fibonacci.c:4
#1  0x00005555555551e9 in fibonacci (n=9) at fibonacci.c:8
#2  0x0000555555555217 in fibonacci (n=10) at fibonacci.c:9
#3  0x000055555555526a in main () at fibonacci.c:18
(gdb) frame 1
#1  0x00005555555551e9 in fibonacci (n=9) at fibonacci.c:8
8           return fibonacci(n-1) + fibonacci(n-2);
(gdb) info locals
n = 9
(gdb) continue
Continuing.

Breakpoint 1, fibonacci (n=9) at fibonacci.c:4
4           if (n <= 1) {
(gdb) bt
#0  fibonacci (n=9) at fibonacci.c:4
#1  0x00005555555551e9 in fibonacci (n=8) at fibonacci.c:8
#2  0x0000555555555217 in fibonacci (n=9) at fibonacci.c:9
#3  0x000055555555526a in main () at fibonacci.c:18
(gdb) frame 1
#1  0x00005555555551e9 in fibonacci (n=8) at fibonacci.c:8
8           return fibonacci(n-1) + fibonacci(n-2);
(gdb) info locals
n = 8
(gdb) continue
...

标签:数列,递归,fibnacci,Fib,gdb,fibonacci
From: https://www.cnblogs.com/twilight0966/p/17811337.html

相关文章

  • fibnacci数列递归实现
    一、网上查询资料说明什么是fibnacci数列斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(LeonardoFibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”。斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89...这个数列从第3项开始,每一项都等于前两项之......
  • fibnacci数列递归实现
    1.什么是fibnacci数列斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(LeonardoFibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……不难发现,前两项的值各为1,从第三项起,每一项都是前两项的和。2.fibnacci数......
  • fibnacci数列
    1.fibnacci数列由百度百科,斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(LeonardoFibonacci)以兔子繁殖为例子而引入,故又称“兔子数列”,其数值为:1、1、2、3、5、8、13、21、34……在数学上,这一数列以如下递推的方法定义:F(0)=1,F(1)=1,F(n)=F(n-1)+......
  • fibnacci数列递归实现
    网上查询资料说明什么是fibnacci数列?斐波那契数列是一个无限的整数序列,其定义如下:序列中的前两个数字是0和1,从第三个数字开始,每个数字都是前两个数字的和。也就是说,斐波那契数列的前几个数字是0,1,1,2,3,5,8,13,21,以此类推。给出fibnacci数列的递归表达式。F(0)=0F......
  • 地排划分 --- 递归
    includeiostream>usingnamespacestd;ints(inta,intb){if(a==b){return1;}if(a>b){swap(a,b);}returns(a,b-a)+1;}intmain(){inta,b;cin>>a>>b;cout<<s(a,b);return0;}......
  • 四个代码融合 依次:小青蛙上台阶 ;求阶乘;求最大公因数;地盘划分(均为递归算法)
    小壁灯上楼梯#include<iostream>usingnamespacestd;inta(intc){if(c<=2){returnc;}else{returna(c-1)+(c-2);}}intmain(intargc,char**argv){intc,k;cin>>c;cout<<a(c);return0;}......
  • 地盘划分 递归
    地盘划分【例】将一个给定的矩形划分为一个个正方形,其规则是先从矩形中划分出一个尽可能大的正方形,接下来,在剩下的矩形中再划分出一个尽可能大的一个正方形,以此类推。例如,宽*长为3*4的矩形,最少可划分为4个正方形,也就是说。取走一个3*3的正方形后,将问题规模变成3*1,然后变为2*1,最后......
  • 地盘划分(递归)
    #include<iostream>#include<algorithm>#include<cstdio>usingnamespacestd;longlonga,b,c,s=0;intmain(){scanf("%lld",&a);scanf("%lld",&b);while(a>1){if(b>a){c=a;a=b;b=c;}......
  • fibnacci数列递归实现
    fibnacci数列递归实现1.什么是fibnacci数列斐波那契数列指的是一个数列从第三项开始每一项都等于前两项之和。如1,1,2,3,5,8,13,21,34,.......下图为一个几何理解图2.fibnacci数列的递归表达式F(n)=F(n-1)+F(n-2)就是中学所学递推公式3.用C语言递归实现Fib(n)C......
  • 后序遍历非递归(作业
    #define_CRT_SECURE_NO_WARNINGS#defineMax64#include<stdio.h>#include<stdlib.h>//二叉树的定义typedefstructnode{ chardata; intvisit; structnode*lchild; structnode*rchild;}bitree;//栈的定义typedefstruct{ bitree*data[Max]; in......