斐波那契(Fibonacci)是一位意大利数学家,他将这一学科介绍给了欧洲数学,但是甚至在他上任之前就提到过类似的系列。
斐波那契数有两个定义,但有微小的变化。两者非常相似,但几乎没有什么不同。
第一:
0、1、1、2、3、5、8…
第二:
1,1,2,3,5,8,…
如果您仔细查看上述序列,则每个数字都将被构造为前两个数字的总和。前两个数字为:零和一(或一和一)。
对于本文,我们’ll使用第一个定义。
斐波那契(0)= 0,
斐波那契(1)= 1
斐波那契(2)=斐波那契(0)+斐波那契(1)= 0 +1 = 1
斐波那契(3)=斐波那契(1)+斐波那契(2)= 1 +1 = 2
斐波那契(4)=斐波那契(2)+斐波那契(3)= 1 + 2 = 3
…
斐波那契(n)=斐波那契(n-2)+斐波那契(n-1)。
斐波那契数的实现
创建斐波那契数组的方法有很多,但我将展示两种最常用的方法。
第一种方法是使用递归实现。为此,您应该发现图案并将其应用于功能,如下所示。
long long FibonacciElement( long long n) { 如果(n == 0)返回0; 如果(n == 1)返回1; return FibonacciElement(n-2) + FibonacciElement(n-1); }
现在,我强烈建议您采用斐波那契数列的第8个元素,并在教科书或某些适合该任务的程序中使用二叉树结构进行计算。
在分析它时,您应该注意到有些元素被计算了几次,这就是这种方法速度较慢的原因之一,如果您使用内置记忆的编译器,则可以解决该问题,有时您需要使用很少的调整。
第二种方法将不使用函数的自调用,如下所示:
long long FibonacciElement2( long long n) { long long Previous = 0, PPrevious = 1; long long i=2, Curent; while( i <= n) { Curent = PPrevious + Previous; PPrevious = Previous; Previous = Curent; ++i; } return Curent; }
递归实现通常比没有自调用函数的实现慢。那是另一次讨论,我们不会讨论这个问题,但是我认为这是短篇小说的好时机。
#include <iostream> using namespace std; long long FibonacciElement1(long long); long long FibonacciElement2(long long); int main(void) { cout<<"Calculate Fibonacci element"<<endl <<"enter the n -"; long long int lliN; cin>>lliN; cout<<"With recursion F(n) ="<<FibonacciElement1(lliN)<<endl <<"Iterative solution F(n)="<<FibonacciElement2(lliN)<<endl; int iRespond; cin>>iRespond; return EXIT_SUCCESS; } long long FibonacciElement1( long long n) { 如果(n == 0)返回0; 如果(n == 1)返回1; 返回FibonacciElement1(n-2)+ FibonacciElement1(n-1); } long long FibonacciElement2( long long n) { long long Previous = 0, PPrevious = 1; if( n==0) return 0; if( n==1) return 1; long long i=1, Curent; while( i <= n) { Curent = PPrevious + Previous; PPrevious = Previous; Previous = Curent; ++i; } return Curent; }
我们讨论了什么是斐波那契数,并且我们看到了两种计算方法。
我建议您通过更深入地研究对该主题进行进一步研究。该算法也有实际应用。
其他练习:
- 创建并显示前n个斐波那契数,分别使用第一个和第二个定义。
- 显示第n个斐波那契数:以二进制形式,十六进制形式和八进制形式显示。
- 用n个斐波那契数创建向量。
- 构造类似于Fibonacci数组的数组,但使用:a和b作为前两个数字。
- 形成类似于Fibonacci数组的序列,其中树的第一个元素等于:1、1和1。
- 具有一些近似公式的第n个斐波那契数,如果您可以自己创建一个,那会更好。
- 查找前n个斐波纳契数的总和。
如果您喜欢这篇文章,您可能还会喜欢..
![]() |
![]() |
![]() |
![]() |
哇,肯定有很多这样简单的算法代码。例如,在Ruby中,可以将以下相同的代码替换为上面相同的代码:
f =- >(x){ x 8
所以我’d说,尽管C / C ++对很多事情都有好处,但这绝对不是其中之一。