由於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 由於數列的值增...