七種方式求斐波那契(Fibonacci)數列通項

2021-08-26 03:10:27 字數 1109 閱讀 1875

由於double型別的精度還不夠,所以程式算出來的結果會有誤差,如果把公式展開計算,得出的結果就是正確的。

完整的實現**如下:

#include "iostream"

#include "queue"

#include "cmath"

using namespace std;

int fib1(int index) //遞迴實現

if(index==1 || index==2)

return 1;

return fib1(index-1)+fib1(index-2);

}int fib2(int index) //陣列實現

if(index<3)

int *a=new int[index];

a[0]=a[1]=1;

for(int i=2;i實現

vectora(2,1); //建立乙個含有2個元素都為1的向量

a.reserve(3);

for(int i=2;iq;

q.push(1);

q.push(1);

for(int i=2;i七:二分矩陣方法

如上圖,fibonacci 數列中任何一項可以用矩陣冪算出,而n次冪是可以在logn的時間內算出的。

下面貼出**:

void multiply(int c[2][2],int a[2][2],int b[2][2],int mod)

//計算矩陣乘法,c=a*b

int fibonacci(int n,int mod)//mod表示數字太大時需要模的數

,}; int result[2][2]=,};//初始化為單位矩陣

int s;

n-=2;

while(n>0)

//二分法求矩陣冪

s=(result[0][0]+result[0][1])%mod;//結果

return s;

}

附帶的再貼上二分法計算a的n次方函式。

int pow(int a,int n)

return ans;

}

斐波那契 Fibonacci 數列的七種實現方法

廢話不多說,直接上 include stdio.h include queue include math.h using namespace std 一 遞迴實現 使用公式f n f n 1 f n 2 依次遞迴計算,遞迴結束條件是f 1 1,f 2 1。int fib1 int index if ...

求斐波那契數列

一 用陣列求取斐波那契數列第n項的數值 非遞迴 斐波那契數列求取思想 第n項 第n 1項 第n 2項 function getvalue n var j 0 while j n 1 return arr j else alert getvalue 8 求第八項的值 二 使用遞迴求取第n項的值 fun...

快速求斐波那契

description fibonacci數列,大家應該都很熟悉了吧?fibonacci數列是這樣定義的 f 0 0 f 1 1 f n f n 1 f n 2 for n 1 大家都知道fibonacci數列的增長速度是驚人的。當n 47時,f 47 2971215073 2 31 由於數列的值增...