问题:
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) .注意:这里的矩阵乘法并没有实现,可以写一个函数实现即可。
分享到:
相关推荐
斐波那契数列(Fibonacci sequence),也被称为黄金分割数列,是由意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci)在13世纪提出的一个经典数学序列。这个数列的基本定义是从第3项开始,每一项都是前两项的和...
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)...
斐波那契数列是计算机科学中一个经典的概念,它在算法设计、数据结构和许多其他领域都有广泛应用。斐波那契数列定义如下:序列的前两个数字是0和1,之后的每个数字都是前两个数字的和。用数学公式表示就是: F(0) =...
cout << "The " << n << "th Fibonacci number is: " << fibonacci(n) ; return 0; } ``` 在这个代码中,我们首先定义了一个2x2的矩阵类型,然后实现了矩阵乘法和矩阵快速幂函数。`matrixPower`函数使用分治策略...
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个斐波那契数。...
斐波那契数列是一种经典的数学序列,其中每个数字是前两个数字的和。数列的前两个数字通常是0和1,之后的每个数字都是前两个数字相加得到的。斐波那契数列的前几项是1、1、2、3、5、8、13、21、34等。在计算机科学中...
斐波那契数列是一个非常经典的数学概念,它在计算机科学和编程中有着广泛的应用,尤其是在算法设计、数据结构和动态规划等领域。斐波那契数列定义如下:第一项F0=0,第二项F1=1,从第三项开始,每一项都等于前两项之...
在数学领域中,斐波那契数列(Fibonacci sequence)是一种非常著名的数列,以其独特的性质和广泛的应用而闻名。斐波那契数列是这样定义的:每一项都是前两项的和,通常第一项和第二项分别设定为0和1或1和1。用数学...
斐波那契数列是计算机科学中一个经典的概念,它在算法设计、数学建模以及很多实际问题中都有广泛的应用。这个数列的定义非常简单:第一项和第二项都是1,从第三项开始,每一项都等于前两项之和。用数学公式表示就是...
斐波那契数列是一个非常基础且有趣的数学概念,在计算机科学和算法设计中有着广泛的应用。这个数列的定义是这样的:序列中的第一项和第二项都是1,从第三项开始,每一项都等于前两项之和。用数学公式表示就是 F(1) =...
斐波那契数列(Fibonacci Sequence)是一个数学上的数列,定义如下:第一项是0,第二项是1,后续每一项都是前两项之和。用数学公式表示为:F(n) = F(n-1) + F(n-2),其中n大于1。这个数列在自然界、艺术和计算机科学...
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.
【标题】:斐波那契数列生成器的简单硬件描述 在数字电路设计领域,VHDL(Very High-Speed Integrated Circuit Hardware Description Language)是一种重要的编程语言,用于描述数字系统的结构和行为。本主题将深入...
斐波那契数列是一个经典的数学问题,在计算机科学和算法设计中经常被用作示例。斐波那契数列的定义如下:F(0) = 0,F(1) = 1,对于n > 1,F(n) = F(n-1) + F(n-2)。这个问题在面试中常用来考察候选人的编程能力和...
程序清单展示了实际的汇编语言源代码,其中包括字符串常量用于提示用户输入,缓冲区存储用户输入,变量number存储n值,mulfact和fei数组用于计算和存储斐波那契数列。 整个课程设计过程按照时间表进行,分为系统...
斐波那契数列(Fibonacci Sequence)是数学中一个经典的数列,它的定义如下:第一项F1和第二项F2都是1,从第三项开始,每一项都等于前两项之和,即Fn = Fn-1 + Fn-2。在给定的C语言代码中,我们看到的是一个用于计算...