演算法設計(c計算斐波那契額數列模

2021-03-22 00:10:43 字數 1928 閱讀 8212

1樓:計0劃0環0境

在做程式設計題目的時候經常會遇到「斐波那契數列」相關的題目,尤其在做oj中。下面說一些方法:

(一)遞迴

遞迴是最慢的會發生重複計算,時間複雜度成指數級。

long long fac(int n)

(二)迴圈

利用臨時變數來儲存中間的計算過程,加快運算。

long long fac(int n)

}return b;

}(三)矩陣乘法+空間換時間(減少乘法,取模運算)

數列的遞推公式為:f(1)=1,f(2)=2,f(n)=f(n-1)+f(n-2)(n>=3)

用矩陣表示為:

進一步,可以得出直接推導公式:

由於矩陣乘法滿足結合律,在程式中可以事先給定矩陣的64,32,16,8,4,2,1次方,加快程式的執行時間。(有些題目需要取模運算,也可以事先進行一下)。給定的矩陣次冪,與二進位制有關是因為,如下的公式存在解,滿足xi=:

為了保證解滿足 xi=,對上述公式的求解從右向左,即求解順序為xn,xn-1,xn-2,....,x1,x0。

完整**實現如下:

///求解fac(n)%100000,其中n為大於等於3的正整數

#include

#include

long long fac_tmp[6][4]=,   ///32次冪%100000

,  ///16次冪%100000

,   ///8次冪%100000

,   ///4次冪%100000

,   ///2次冪%100000

,   ///1次冪%100000

};void fac(int);

int main()

void fac(int k) ///k>=3

i=4;

while(i>=0)    ///對於小於32的k(16,8,4,2,1);

i--;

}a=(t00*2+t01*1)%100000;

printf("%lld\n",a);}

2樓:匿名使用者

#include

typedef unsigned int uint_32;

uint_32 fibonacci(uint_32 n)return fn_1;

}int main()

return 0;}

c++簡單的遞迴函式設計(斐波那契數列)

3樓:匿名使用者

||#include "stdafx.h"

#include

using namespace std;

int f(int n)

int main()

{int i,a[12];

for (i=0;i<12;i++)

{a[i]=f(i);

cout<

4樓:溼潤的風

|||#include

long fibonacci(int n)

main()

5樓:匿名使用者

long fibo(int n)

斐波那契數列c++程式設計

6樓:

斐波那契數列就是 0 1 1 2 3 5 8 13 21 ...

除了最開始的0和1,後面每一個數都是前面兩個數相加之和。

不用遞迴就用迴圈啊。

7樓:

真服了你,遞迴也做得到n的時間複雜度的啊

很多東西用遞迴解決容易,用其他方法麻煩

8樓:匿名使用者

#include

#include

double f,n;

int main()

斐波那契數列112358132134這

斐波那契數列個位數字 十個一行 1 1 2 3 5 8 3 1 4 59 4 3 7 0 7 7 4 1 56 1 7 8 5 3 8 1 9 09 9 8 7 5 2 7 9 6 51 6 7 3 0 3 3 6 9 54 9 3 2 5 7 2 9 1 01 1 2 3 5 週期為60,而201...

求用C語言表達斐波那契數列

斐波那契數列,又稱 分割數列,指的是這樣一個數列 0 1 1 2 3 5 8 13 21 34 專 在數學上,斐波屬納契數列以如下被以遞迴的方法定義 f 0 0,f 1 1,f n f n 1 f n 2 n 2,n n 在現代物理 準晶體結構 化學等領域,斐波納契數列都有直接的應用,為此,美國數學...

用c語言求斐波那契數列第n項的值

複製貼上即可 求 fibonacci 數列第 n 個數 1 1 2 3 5 8 13 21 include void main printf d n x getchar getchar include void main printf d n f 加上括號 if n 2 printf 1 這樣改 怎...