題目:
乙隻青蛙可以一次跳上一級台階,也可以一次跳上二級,求該青蛙跳上乙個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...