跳台階問題-java,跳台階-java
跳台階問題
題目描述:
一隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上一個n級的台階總共有多少種跳法。
解析
這個問題歸根結底還是一個費布拉奇數列,仔細找一下規律即可,剛開始做的時候我是直接寫出前六個數的結果來找規律的。
一級台階:1種 fib(1)=1
二級台階:2種 fib(2)=2
三級台階:3種 fib(3)=fib(1)+fib(2)=3
四級台階:5種 fib(4)=fib(2)+fib(3)=5
五級台階:8種 fib(5)=fib(3)+fib(4)=8
六級台階:13種 fib(6)=fib(4)+fib(5)=13
現在看出規律了吧,fib(n)=fib(n-1)+fib(n-2),fib(1)=1,fib(2)=2。
java代碼如下所示(直接在main函數中調用即可):
public int jumpFloor(int number) { if (number == 1) return 1; else if (number == 2) return 2; else return jumpFloor(number-1)+jumpFloor(number-2); }
變態跳台階問題
題目描述
一隻青蛙一次可以跳上1級台階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的台階總共有多少種跳法。
解析
這個也是如上所示的推理方法,沒什麼技術含量。寫出前六個的跳台階的結果,這個有一部分在上面的已經數出來了,所以我們就只要算上可以跳2階台階以上的結果就行了。然後算出
一級台階:1種 f=fib(1)=1=2^1
二級台階:2種 f=fib(2)=2=2^2
三級台階:3種 f=fib(3)+1=4=2^3
四級台階:5種 f=fib(4)+3=8=2^4
五級台階:8種 f=fib(5)+8=16=2^5
六級台階:13種 f=fib(6)+19=32=2^6
然後這個思路清晰了,代碼就好寫了,和上面類似,都是考察遞迴和迴圈的知識點。
public int jumpFloor2(int number) { if (number ==1) return 1; else if(number==2) return 2; else return jumpFloor2(number-1)*2; }
總結:
在做題的時候,剛開始總要學會動筆找一些規律,先想好思路,找出規律,把問題用數學方法找出解決規律辦法,然後再用編程來實現。當然方法有很多種,實現的編程方法也可以是for迴圈,這個應該算是最簡潔的代碼實現方法吧。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。