蛙跳台階問題解決演算法

2021-08-22 03:16:20 字數 794 閱讀 8878

題目:

乙隻青蛙可以一次跳上一級台階,也可以一次跳上二級,求該青蛙跳上乙個n級台階總共有多少種跳法
1

解題思路:

我們把n級台階的跳法看成是n的函式,記為f(n),當n>2時,第一次調的時候就有兩種不同的選擇,一是第一次跳一級,則此時的跳法數目等於後面剩下的n-1級台階的跳法數目,即為f(n-1);另一種選擇是一次跳2級,此時跳法數目等於後面剩下的n-2級台階跳法數目,即為f(n-2).因此n級台階不同跳法總數f(n)=f(n-1)+f(n-2).分析到這裡,我們不難看出這就是斐波拉契數列了。

解法一:遞迴解法

//用遞迴方式實現的斐波拉契數列

public

long

fibonacci(int n)

if(n==1)

return fibonacci(n-1)+fibonacci(n-2);

}

由於遞迴解法會出現重複計算(以f(4)=f(2)+f(2)+f(1)為例,f(2)重複計算了2次),所以更優化的方式可以採取迭代的方式,解法如下

//迭代方式實現的斐波拉契數列

public

long

fibonacci(int n);

if(n<2)

int pre = 0;

int current = 1;

int next = 0;

for(int i=2;i<=n;i++)

return next;

}

java 蛙跳台階問題解決演算法

題目 乙隻青蛙可以一次跳上一級台階,也可以一次跳上二級,求該青蛙跳上乙個n級台階總共有多少種跳法解題思路 我們把n級台階的跳法看成是n的函式,記為f n 當n 2時,第一次調的時候就有兩種不同的選擇,一是第一次跳一級,則此時的跳法數目等於後面剩下的n 1級台階的跳法數目,即為f n 1 另一種選擇是...

漢諾塔問題解決演算法

問題描述 假設有3 個分別命名為x,y,z的塔座,在塔座 x上插有 n個直徑大小各不相同 依小到大編號為1,2,n個圓盤。現要求將 x軸上的 n個圓盤移至塔座 z上並仍按同樣順序疊排,圓盤移動時必須遵守下列規則 1 每次只能移動乙個圓盤 2 圓盤可以插在x,y和z中的任一塔座上 3 任何時刻都不能將...

分治思想解決演算法問題

不多bb,o n 2 include using namespace std void solve int f 5000 int m cin m for int i 0 i m i cin a i f 0 0 for int i 1 i m i f i f i 1 sum cout f m 1 en...