跳台階問題 斐波那契數列

2021-08-08 07:58:04 字數 1593 閱讀 8103

本篇文章有兩道題。

對於本題,前提只有 一次 1階或者2階的跳法。

a.如果兩種跳法,1階或者2階,那麼假定第一次跳的是一階,那麼剩下的是n-1個台階,跳法是f(n-1);

b.假定第一次跳的是2階,那麼剩下的是n-2個台階,跳法是f(n-2)

c.由a\b假設可以得出總跳法為: f(n) = f(n-1) + f(n-2)

d.然後通過實際的情況可以得出:只有一階的時候 f(1) = 1 ,只有兩階的時候可以有 f(2) = 2

e.可以發現最終得出的是乙個斐波那契數列:

——– | 1, (n=1)

f(n) = | 2, (n=2)

——– | f(n-1)+f(n-2) ,(n>2,n為整數)

public:

int jumpfloor(int number)

else

if (number == 1)

return jumpfloor(number - 1) + jumpfloor(number - 2);

}};

遞迴引起一系列的函式呼叫,並且有可能會有一系列的重複計算,遞迴演算法的執行效率相對較低.所以能使用迴圈的,就不要使用遞迴

迭代法求斐波那契數列:

class solution 

return i;}}

};

1)這裡的f(n) 代表的是n個台階有一次1,2,…n階的 跳法數。

2)n = 1時,只有1種跳法,f(1) = 1

3) n = 2時,會有兩個跳得方式,一次1階或者2階,這回歸到了問題(1) ,f(2) = f(2-1) + f(2-2)

4) n = 3時,會有三種跳得方式,1階、2階、3階,

那麼就是第一次跳出1階後面剩下:f(3-1);第一次跳出2階,剩下f(3-2);第一次3階,那麼剩下f(3-3)

因此結論是f(3) = f(3-1)+f(3-2)+f(3-3)

5) n = n時,會有n中跳的方式,1階、2階…n階,得出結論:

f(n) = f(n-1)+f(n-2)+…+f(n-(n-1)) + f(n-n) => f(0) + f(1) + f(2) + f(3) + … + f(n-1)

6) 由以上已經是一種結論,但是為了簡單,我們可以繼續簡化:

f(n-1) = f(0) + f(1)+f(2)+f(3) + … + f((n-1)-1) = f(0) + f(1) + f(2) + f(3) + … + f(n-2)

f(n) = f(0) + f(1) + f(2) + f(3) + … + f(n-2) + f(n-1) = f(n-1) + f(n-1)

可以得出:

f(n) = 2*f(n-1)

7) 得出最終結論,在n階台階,一次有1、2、…n階的跳的方式時,總得跳法為:

——- | 1 ,(n=0 )

f(n) = | 1 ,(n=1 )

——– | 2*f(n-1),(n>=2)

class solution 

};

斐波那契數列(跳台階)

題目1 斐波那契數列 大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項 從0開始,第0項為0 n 39 斐波那契數列定義 1 1 2 3 5 8 13 21 34 我們最容易想到的是遞迴的方式,如下 public int fibonacci int n if n 1 re...

斐波那契數列及青蛙跳台階問題

都是 寫乙個函式,輸入n,求斐波那契 fibonacci 數列的第n項。斐波那契 fibonacci 數列定義如下 f n 0,1,f n 1 f n 2 n 0n 1 n 2 效率很低的解法 遞迴解法 效率很低 long long fibonacci solution1 unsigned int ...

斐波那契數列及青蛙跳台階問題

題目1 寫乙個函式,輸入n,求斐波那契 fibonacci 數列的第n項。斐波那契 fibonacci 數列定義如下 f n 0,1,f n 1 f n 2 n 0 n 1 n 2 效率很低的解法 遞迴解法 效率很低 objc view plain copy long long fibonacci ...