Java實現青蛙跳台階

2021-08-01 23:25:32 字數 2082 閱讀 3554

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

我的想法:我記得這是乙個斐波那契數列的問題?但是做出來不對。

public class solution 			

int next=1;

int nn=0;

if(target-1>=1)

next=jumpfloorii(target-1);

if(target-2>=1)

nn=jumpfloorii(target-2);

int result=math.max(next,nn);

return result;}}

來,學習一下偉大的斐波那契數列吧!

「斐波那契數列

(fibonacci sequence),又稱

**分割

數列、因數學家列昂納多·斐波那契(leonardoda fibonacci)以兔子繁殖為例子而引入,故又稱為「

兔子數列

」,指的是這樣乙個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以

遞迴的方法定義:f(0)=0,f(1)=1, f(n)=f(n-1)+f(n-2)(n>=2,n∈n*)」

那麼回到這個台階問題:

因為n級台階,第一步有n種跳法:跳1級、跳2級、到跳n級

跳1級,剩下n-1級,則剩下跳法是f(n-1)

跳2級,剩下n-2級,則剩下跳法是f(n-2)

所以f(n)=f(n-1)+f(n-2)+...+f(1)

因為f(n-1)=f(n-2)+f(n-3)+...+f(1)

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

所以如果用遞迴的話,**為:

public class solution  else if (target == 1)  else }}

如果是大神的話,**為:

return  1<
理由是:

當target等於1時,有1種跳法1<

target=2時,有2種跳法1<

target=3時,有4種跳法1<

target=4時,有8中跳法1<

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

這個跟之前的不一樣在於,要麼跳1個,要麼跳2個,沒有其他的跳法了。

這裡的遞推公式是:

f(1)=1;

f(2)=2;

f(3)=f(1)+f(2)

f(4)=f(3)+f(2)

.....

f(n)=f(n-1)+f(n-2);

所以我的遞迴**,574ms

public class solution 

if (target == 1)

if (target == 2)

int sum=jumpfloor(target-1)+jumpfloor(target-2);

return sum;}}

但是大神認為用遞迴的時間可能太長了,提出了另一種思路: 29ms

public class solution 

if (target == 1)

if (target == 2)

int first = 1;

int second = 2;

int third = 0;

for(int i = 3; i <= target; i++)

return third;}}

f(1)=1;

f(2)=2;

f(3)=f(1)+f(2)

f(4)=f(3)+f(2)

f(5)=f(4)+f(3)

看出規律了嗎,這裡直接用迴圈就可以了,不需要遞迴,因為之前的f(3)f(4)都已經計算過了~~

青蛙跳台階(java)

一 問題描述 乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。二 演算法分析 因為青蛙一次只能跳上1級台階或者兩級台階,所以對於第n級台階來說,青蛙只能從第n 1級台階或者第n 2級台階跳上。設青蛙跳上第n級台階有f n 種跳法,則 f n f n 1 f ...

青蛙跳台階

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法。解題思路 1 如果兩種跳法,1階或者2階,那麼假定第一次跳的是一階,那麼剩下的是n 1個台階,跳法是f n 1 2 假定第一次跳的是2階,那麼剩下的是n 2個台階,跳法是f n 2 3 總跳法為 f n f n...

青蛙跳台階

之前面試遇到了這種題目,不會,後來搜尋了一下,感覺分析的很好 青蛙跳乙個n階的台階,每次可以跳1階或者2階,求跳完n階y有多少種方法。分析 n 1,f n 1 n 2,f n 2 n 3,f n 3 n 4,f n 5 可以發現 f n f n 1 f n 2 由此也可以推想 比如要跳到第4階樓梯上...