首页 > 其他分享 >Fibnacci数列

Fibnacci数列

时间:2022-10-04 13:11:52浏览次数:80  
标签:Fib return 数列 int Fibnacci 斐波 那契

Fibnacci数列

Fibnacci数列定义

  • 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波那契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波那契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
    (百度百科 )

  • 这个数列从第3项开始,每一项都等于前两项之和。

  • 斐波那契数列的定义者,是意大利数学家莱昂纳多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是比萨。他被人称作“比萨的莱昂纳多”。1202年,他撰写了《算盘全书》(Liber Abacci)一书。他是第一个研究了印度和阿拉伯数学理论的欧洲人。他的父亲被比萨的一家商业团体聘任为外交领事,派驻地点于阿尔及利亚地区,莱昂纳多因此得以在一个阿拉伯老师的指导下研究数学。他还曾在埃及、叙利亚、希腊、西西里和普罗旺斯等地研究数学。另外斐波那契还在计算机C语言程序题中应用广泛。

Fibnacci数列的递归表达式

F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

C语言实现

递归算法
#include <stdio.h>
int Fib(int n)
{
    if (n == 0)
        return 0;
    if (n == 1)
        return 1;
    if (n > 1)
        return (Fib(n - 1) + Fib(n - 2));
}
    int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%d\n", Fib(n));
    return 0;
} 

上网查询后得知递推算法的时间复杂度是O(2^n),n的值一大就需要花费大量时间,使用递归算法我的电脑计算到40就会卡住

递推算法
#include <stdio.h>
int Fib(int n)
{
    int i = 0;
    int x = 0;
    int y = 1;
    int z = 0;
    if (n == 0)
    {
        return 0;
    }
    if (n == 1)
    {
        return 1;
    }
    if (n > 1)
    {
        for (i = 0; i < n - 1; i++)
        {
            z = x + y;
            x = y;
            y = z;
        }
        return z;
    }
}
int main()
{
    int n = 0;
    scanf("%d", &n);
    printf("%d\n", Fib(n));
    return 0;
}  

递推的算法比递归的算法效率更高,时间复杂度是O(n);
如果想要进一步提高效率,可以保存每一步算的F(n)用作下一步计算。
当n=47时,数据已经开始溢出了。

调试查看堆栈情况



标签:Fib,return,数列,int,Fibnacci,斐波,那契
From: https://www.cnblogs.com/he-zhan/p/16753590.html

相关文章

  • 间距数列
    题目满足以下条件的长为\(n\)的整数序列\(a_1,a_2,\cdots,a_n\)有多少个?\(1\leqslanta_i\leqslantm\),\(1\leqslanti\leqslantn\)\(|a_i-a_{i+1}|\geqs......
  • 1214. 波动数列
    https://www.acwing.com/problem/content/1216/定义f[i][j]为考虑前i个d,余数为j的count数需要注意的是,根据理解推得的公式,有多种等效形式我这里为n*x+1*d1+2*d2+3*d3+.......
  • 1106 2019数列——15分
    把2019各个数位上的数字2、0、1、9作为一个数列的前4项,用它们去构造一个无穷数列,其中第n(>4)项是它前4项之和的个位数字。例如第5项为2,因为2+0+1+9=12,个位数是......
  • 数列分块入门
    数列分块入门算是入门了吧写在前面本人十分之Naive所以写的不好还请见谅。前置知识暴力线段树线段树貌似也不太需要,但本文建立在你已经会线段树的基础上。但真......
  • LeetCode剑指 Offer II 093 最长斐波那契数列
    LeetCode剑指OfferII093最长斐波那契数列classSolution:deflenLongestFibSubseq(self,arr:List[int])->int:n,loc,ans=len(arr),{},0......
  • js 获取当前地址的查询参数列表
    eg.https://go.gliffy.com/go/html5/launch?_ga=2.201967958.654328489.1658124867-1818406430.1658124867console.log(location.search)结果:?_ga=2.201967958.654328489.16......
  • libnet 函数列表
    libnet提供的接口函数按其作用可分为四类:*内存管理(分配和释放)函数*地址解析函数*数据包构造函数*数据包发送函数以下分别列出这些接口函数及其功能(其参数含义简单易......
  • 做题记录整理dp12 P7961 [NOIP2021] 数列(2022/9/26)
    P7961[NOIP2021]数列当时在考场上对于拿部分分这个感念不是很清晰,所以当时连暴力分都没拿。。。事实上这题在看了题解之后还是有很多地方没搞明白,比如最后统计答案,为什......
  • 斐波那契数列(取模)
    题目:菲波那契数列是指这样的数列:数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数a,要求菲波那契数列中第a个数对1000取模的结果是多少。......
  • 斐波那契数列(递归、记忆化搜索、递归)
    题目:菲波那契数列是指这样的数列:数列的第一个和第二个数都为1,接下来每个数都等于前面2个数之和。给出一个正整数k,要求菲波那契数列中第k个数是多少。输入输入一行,......