題目一:斐波那契數列
題目描述
寫一個函數,輸入n,求斐波那契(Fibonacci)數列的第n項。斐波那契數列定義為:
| 0, n = 0
f(n) = | 1, n = 1
| f(n-1) + f(n-2), n>1
解題思路:
- 遞歸會產生很多重復的計算,這里使用循環的方式。
- 根據f(0)和f(1)計算出f(2),再根據f(1)和f(2)計算出f3,以此類推就可以計算出f(n)了。
代碼
int fibonacci(int n){
if (n == 0) {
return 0;
}
if (n == 1) {
return 1;
}
int f1 = 0;
int f2 = 1;
int fn = 0;
for (int i = 2; i <= n; i++) {
fn = f1 + f2;
f1 = f2;
f2= fn;
}
return fn;
}
題目二:青蛙跳臺階問題
題目描述
一只青蛙一次可跳上1級臺階,也可以跳上2級臺階。求該青蛙跳上n級臺階總共有多少種跳法。
解題思路:
- 假設跳到n級臺階的跳法為f(n), 則調到n-1級臺階的跳法為f(n-1),跳到n-2級臺階的跳法為f(n-2)
- 要跳到n級臺階,必須是從n-1級再跳一個臺階,或者從n-2級再跳2個臺階,因此f(n) = f(n-1)+ f(n - 2)
- 即為斐波那契數列。