`
gaofen100
  • 浏览: 1227678 次
文章分类
社区版块
存档分类
最新评论

Fibonacci Number (斐波那契数列)

 
阅读更多

问题:

F0 = 0
F1 = 1
Fn = Fn − 1 + Fn − 2

求Fn

Fibonacci数列是一个非常经典的用递归解决的问题。递归方法如下:

递归做的话,它的复杂度是指数级的,原因可以通过画递归的结构图就能马上明白了。

还有一种方法是用动态规划的实现,从第一个开始,而不是从最后一个。这样做的好处是我们不会重复计算同一个值,比如我们计算F(10)的时候,如果用递归方法,F(4)会被计算很多遍,浪费了很多时间。


这种方法的空间复杂度为O(n),我们可以使一点小手段,把空间复杂度降为 O(1)


但是,这两种方法(递归和DP)都不是最好的方法,我们来看看一个更巧的方法。

首先告诉你一个事实(下图),可能你不一定会相信。如果你不相信,你可以自己动手试试看。


有了这个式子,问题就还没有完,我们先做一个简单的运算。

如果我们想知道2的100次方是多少,如果你稍微想一下就知道我们先找2的50次方(因为2^100 = 2^50 * 2^50),再找2的25次方,再找2的12次方,。。。,直到2的一次方。

好了,有了上面的基础,如果要算一个矩阵的n次方,我们就不会一个一个矩阵相乘了。代码如下:

这样,整个算法复杂度为O(lg n) .注意:这里的矩阵乘法并没有实现,可以写一个函数实现即可。





分享到:
评论

相关推荐

    斐波那契数列c++.pdf

    斐波那契数列(Fibonacci sequence),也被称为黄金分割数列,是由意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci)在13世纪提出的一个经典数学序列。这个数列的基本定义是从第3项开始,每一项都是前两项的和...

    用Python实现斐波那契(Fibonacci)函数

    Fibonacci斐波那契数列,很简单,就是一个递归嘛,学任何编程语言可能都会做一下这个。 最近在玩Python,在粗略的看了一下Learning Python和Core Python之后,偶然发现网上有个帖子Python程序员的进化写的很有意思。...

    递归算法算斐波那契数列

    斐波那契数列(Fibonacci sequence)是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, 21, ...。该数列从第三项开始,每一项都等于前两项之和。数学上,斐波那契数列可以这样定义: - F(0) = 0 - F(1) = 1 - F(n) = F(n-1)...

    C++:斐波那契数列(迭代和递归)

    斐波那契数列是计算机科学中一个经典的概念,它在算法设计、数据结构和许多其他领域都有广泛应用。斐波那契数列定义如下:序列的前两个数字是0和1,之后的每个数字都是前两个数字的和。用数学公式表示就是: F(0) =...

    斐波那契数列,矩阵连乘法

    cout << "The " << n << "th Fibonacci number is: " << fibonacci(n) ; return 0; } ``` 在这个代码中,我们首先定义了一个2x2的矩阵类型,然后实现了矩阵乘法和矩阵快速幂函数。`matrixPower`函数使用分治策略...

    斐波那契数列第100万项的整数值

    cout << "The " << n << "-th Fibonacci number is: " (n) ; return 0; } ``` 对于非常大的n,如100万,动态规划或矩阵快速幂等高级算法可能会更合适,因为它们可以在对数时间内计算出结果,显著提高了效率。然而...

    斐波那契数列

    - 调用 `display_Max_number` 子程序显示最大的斐波那契数。 5. **程序退出**: - 最后,通过 `mov ah, 4ch` 和 `int 21h` 来终止程序。 通过上述分析,我们可以看到这段汇编代码有效地实现了用户输入长度后输出...

    用循环队列实现斐波那契数列的输出

    printf("Fibonacci number: %d\n", nextFib); enQueue(&queue, nextFib); } return 0; } ``` 以上代码实现了一个使用循环队列的斐波那契数列生成器,由于队列长度限制为5,所以最多可以输出5个斐波那契数。...

    c#斐波那契数列(Fibonacci)(递归,非递归)实现代码

    斐波那契数列是一种经典的数学序列,其中每个数字是前两个数字的和。数列的前两个数字通常是0和1,之后的每个数字都是前两个数字相加得到的。斐波那契数列的前几项是1、1、2、3、5、8、13、21、34等。在计算机科学中...

    用C 语言实现斐波那契数列

    斐波那契数列是一个非常经典的数学概念,它在计算机科学和编程中有着广泛的应用,尤其是在算法设计、数据结构和动态规划等领域。斐波那契数列定义如下:第一项F0=0,第二项F1=1,从第三项开始,每一项都等于前两项之...

    Fibonacci number

    在数学领域中,斐波那契数列(Fibonacci sequence)是一种非常著名的数列,以其独特的性质和广泛的应用而闻名。斐波那契数列是这样定义的:每一项都是前两项的和,通常第一项和第二项分别设定为0和1或1和1。用数学...

    斐波那契数列 动态规划-C语言代码

    斐波那契数列是计算机科学中一个经典的概念,它在算法设计、数学建模以及很多实际问题中都有广泛的应用。这个数列的定义非常简单:第一项和第二项都是1,从第三项开始,每一项都等于前两项之和。用数学公式表示就是...

    Fibonacci数列函数

    斐波那契数列是一个非常基础且有趣的数学概念,在计算机科学和算法设计中有着广泛的应用。这个数列的定义是这样的:序列中的第一项和第二项都是1,从第三项开始,每一项都等于前两项之和。用数学公式表示就是 F(1) =...

    ran_number2_RandomNumber_斐波那契_

    斐波那契数列(Fibonacci Sequence)是一个数学上的数列,定义如下:第一项是0,第二项是1,后续每一项都是前两项之和。用数学公式表示为:F(n) = F(n-1) + F(n-2),其中n大于1。这个数列在自然界、艺术和计算机科学...

    java斐波纳契数列

    The Fibonacci numbers Fn are defined as follows: F0 is 1, F1 is 1, and ...In other words, each number is the sum of the previous two numbers. The first few Fibonacci numbers are 1, 1, 2, 3, 5, and 8.

    Simple hardware description of a fibonacci number generator

    【标题】:斐波那契数列生成器的简单硬件描述 在数字电路设计领域,VHDL(Very High-Speed Integrated Circuit Hardware Description Language)是一种重要的编程语言,用于描述数字系统的结构和行为。本主题将深入...

    剑指Offer(Python多种思路实现):斐波那契数列

    斐波那契数列是一个经典的数学问题,在计算机科学和算法设计中经常被用作示例。斐波那契数列的定义如下:F(0) = 0,F(1) = 1,对于n > 1,F(n) = F(n-1) + F(n-2)。这个问题在面试中常用来考察候选人的编程能力和...

    汇编语言程序设计斐波那契额数列课设报告册.pdf

    程序清单展示了实际的汇编语言源代码,其中包括字符串常量用于提示用户输入,缓冲区存储用户输入,变量number存储n值,mulfact和fei数组用于计算和存储斐波那契数列。 整个课程设计过程按照时间表进行,分为系统...

    C语言实现Fibonacci数列递归

    斐波那契数列(Fibonacci Sequence)是数学中一个经典的数列,它的定义如下:第一项F1和第二项F2都是1,从第三项开始,每一项都等于前两项之和,即Fn = Fn-1 + Fn-2。在给定的C语言代码中,我们看到的是一个用于计算...

Global site tag (gtag.js) - Google Analytics