ACM學習筆記 13Fibonacci數

2021-07-25 13:59:41 字數 805 閱讀 3038

無窮數列1,1,2,3,5,8,13,21,34,55…稱為fibonacci數列,它可以遞迴地定義為

f(n)=1 ………..(n=1或n=2)

f(n)=f(n-1)+f(n-2)…..(n>2)

求第n個fibonacci數。

分析f(n)=f(n-1)+f(n-2)…..(n>2),應該使用遞迴演算法。

遞迴演算法是將問題分解為規模變小了的同類子問題,然後呼叫遞迴函式求解,遞迴函式是直接或間接呼叫其自身。

所以遞迴問題需要乙個函式來反覆呼叫自身,**如下

int f(int

x)int main()

}

算n=30左右的fibonacci數還是很快的,但是到40時速度就非常的慢了。

其原因是在f(x)中return f(x-1)+f(x-2); 因為沒有記錄已經計算過的f(x-1)和f(x-2)的值,每次呼叫f(x)都需要從新分解到f(1)+f(2)從新計算,數字越大,分解的越深,優化後的**如下:

long record[100] = ;

long

long f(long x)

return lzx[x];

}int main()

}

優化的**增加了record[100],每次計算f(x)時都記錄此時f(x)的值,如果再次計算到這裡則直接返回record[x]的值,不用從新計算到f(1)+f(2),並且使用長整形。經過優化可以計算n=100的fibonacci數。但是另乙個問題是使用printf(「%???」,c);時沒沒找到適當的%?。

ACM基礎學習 1 3

時間限制 1 sec 記憶體限制 128 mb 提交 665 解決 270 提交 狀態 討論版 命題人 外部匯入 所謂no.1,就是所有成績都排在第一的同學,我們假設每個人只有理科,文科,體育這三門課。我們現在假設某門成績並列第一,並列的人都是這門功課第一名,並且保證資料不會出現2個no.1 現給定...

acm學習筆記

include include include int main 在乙個平面內有兩個點,求兩個點分別和原點的連線的夾角的大小。include include define pi 3.1415926 int main return 0 用迭代法求平方根。求平方根的迭代公式為 x n 1 1 2 x n...

Effective C 學習筆記 (13)

由於在寫 時很多時候需要用到資源,比如new乙個物件之類的,這樣一來資源的申請和釋放需要程式設計師自己完成,對 的邏輯需要謹慎設計,才能保證資源不會洩漏。其實這類似的程式設計風格,在之前寫c的時候也有編碼規範來規定資源的釋放,比如do while的運用啊,goto exit0之類的方法,但是對於c ...