每天乙個演算法之fibonacci遞迴法優化

2021-07-23 20:37:16 字數 1195 閱讀 4806

public class fibonacci 

//recursionis very clear.but,this method has high complexity,100 we can not caculate theresult.

publicstatic long recursion(long n)

publicstatic long circulation(long n)

returnsum;}}

n=10

result:55----time:6736

result:55----time:1283

n=20

result:6765----time:281608

result:6765----time:1604

n=30

result:832040----time:8039639

result:832040----time:8660

n=40

result:102334155----time:967186178

result:102334155----time:12509

n=50

第乙個就算不出來了

第乙個函式的執行對第二個函式的執行會有不小的影響。注釋掉第乙個函式的,第二個函式執行時間會更短,不過這個結果足夠說明遞迴在有些時候是不適合的。

f(10)

/        \

f(9)         f(8)

/     \       /    \

f(8)     f(7)  f(7)   f(6)

/   \     /   \ 

f(7)  f(6)  f(6) f(5)

第乙個函式之所以慢是因為裡面有重複計算的值,第二個函式正是克服了這種缺點。

這還不是最快的方法。下面介紹一種時間複雜度是o(logn)的方法。在介紹這種方法之前,先介紹乙個數學公式:

通過數學歸納法可以證明

實現這種方式時,首先需要定義乙個2×2的矩陣,並且定義好矩陣的乘法以及乘方運算,就可以計算了。

每天乙個演算法之移位運算

public class bitwise 正數的左移會到0,負數的左移只能讓1越來越多。這是因為左移對應數的減小,負數會越減越小,不可能等於0 public static int bitmove0 int n n n 1 return count 為了克服這個問題,我們可以讓標誌1右移,效果是一樣的...

每天乙個演算法之指數運算

package ff 最爛的方法是乙個for迴圈解決,每次都乘以底數。這種誰都能想出來的方法可以忽略。public class power 這個是比較好的方法。使用到了分治遞迴,考慮到偶數和奇數的情況。指數是偶數時是半 半,奇數時是半 半 底數。時間複雜度lgn public static int ...

每天乙個演算法題 開篇

今天,作為乙個重要時間節點,要開始新的人生了。雖然明天正好趕上婦女節什麼的,但是跟這個沒什麼關係。對於職業規劃依然不是很明朗。有乙個被斃掉的面試至今刻骨銘心,但是也算是乙個重要的提醒,就是想要讓人看得起,首先得有能力,要不斷地學習和儲備。要不斷努力,才不會在機會來臨時白白錯過。部落格新加了乙個分類 ...