關於菲波那契數列的乙個低階問題

時間 2021-05-30 16:49:39

1樓:雲飛

直接用 f(n)=1/√5*((1+√5)/2)^n 一步出來,推導用homogeneous 遞迴公式,保證不會爆,速度槓槓的

2樓:

用斐波那契數列的通項公式,如圖:

pow函式複雜度是O(logn),所以整體複雜度是O(logn)。不過要根據用的語言注意一些細節的方面的處理。

3樓:fcbruce

快速冪+同餘定理,10^6用O(n)的樸素演算法也夠了,還有斐波那契數列用遞迴效率實在是太低了,重複計算次數太多,而且遞迴深度大,很容易爆棧,巧妙利用資料結構和遞推會方便很多

4樓:

The Fibonacci sequence

Haskell的一些演算法,其中還有Constant-time(有條件)的演算法……

5樓:silencew

快速冪方法受教了。

數學上斐波那契數列的通項公式也早就被推導出來。

a = sqrt(5);

f(n) = round(((1+a)^n-(1-a)^n)/2^n/a);

6樓:

對 @沈周 的答案做個筆記。

1. 求菲波那契數列的第n項問題可以轉換為求矩陣的冪

2. 矩陣乘法滿足結合律,因此矩陣的冪次計算可以二分3. 可以二分且每層的計算複雜度為常量的問題,總複雜度為O(logn)

7樓:王洋子豪

如果n為1000000000,也就是1 billion的話基本上效能差距達到了600000倍很可觀

8樓:endless

這個用公式到底能不能修正誤差呢?

據說可以用矩陣加速求解。

int64

fibonacci

(int64n)

n>>=1;

x=a*

a+b*

b;y=

2*a*

b-b*

b;a=

x;b=

y;}returnra;}

9樓:王思源

寫成遞迴也沒問題,但是為了避免棧溢位,一定是要編譯器支援的尾遞迴形式,比如下面這樣寫gcc O2可以轉成迴圈

uint64_t

fib_helper

(uint64_tn,

uint64_ta,

uint64_tb)

10樓:

1000000爆棧了。請參考樓上的寫法。或者開更大的棧。

如果一定要遞迴的話……OJ常用開棧技巧。

#include

#include

const

intMaxN

=1000000

;int

fib[

MaxN+1

];intf(

intx

)int

main()

關於「我」的乙個問題?

雷雲密布 首先你想講的是乙個錯誤,因為你把1十1 2和乙個神話交集了,所以只能去佛家和一夢中去找答案了,主可能都不行,因為主很直白,所以還是道生萬物吧,用道來解就是我應隨風去,天地萬物都有靈,靈為我,我為為萬物。 這是秩的定義問題。具體用什麼定義,要看現實的需要。數只是你看世界的工具,不是 你 你 ...

關於promise的乙個問題?

追風逐月 題主最想看到的是這個 var promise new Promise function resolve,reject 3000 promise then function 3000 promise then function res then function res console.lo...

乙個關於光速??的問題?

univeagle 假設h長30萬公里,l長40萬公里,斜邊長50萬公里,小球以光速運動,1秒鐘後小球到達平面,可原來的影子呢?還老老實實呆在那兒呢!要再過2 3秒才會消失,而此時平面上新的影子已經產生,算起來影子不是超光速,而是穿越了!而且你仔細計算會發現,不算最初的那個影子,其它影子是由近及遠傳...