題目描述:
一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。
思路:
現在青蛙的能力升級了,不僅能一次跳1級,還能一次跳n級,這是了不起的進步(說笑的)。不管如何,我們仍然使用數學歸納法進行分析:
當n=1時,跳法只有1種,用f(1)=f(1-1)=1表示,下同;
當n=2時,可以一次跳1級,跳兩次,也可以一次兩2級,跳法有2種,f(2) = f(2-1) + f(2-2);//f(2-1)表示在有2級臺階的時候,第一次跳1級的跳法,其他類似
當n=3時,可以一次跳1級,跳3次,可以一次跳2級,下一次再跳1級,當然也可以一次跳3級,跳1次,所以跳法是f(3)=f(3-1)+f(3-2)+f(3-3)
……
當n=k的時候,f(k)=f(k-1)+f(k-2)+f(k-3)+…..+f(k-(k-1))+f(k-k)=f(0)+f(1)+f(2)+……+f(k-1),而f(k-1)=f((k-1)-1)+f((k-1)-2)+……+f((k-1)-(k-2))+f((k-1)-(k-1))=f(0)+f(1)+f(2)+……+f(k-2),
所以f(k)=2*f(k-1)。
代碼實現:
public int JumpFloorII(int target) {
if(target <= 0) return -1;
if(target == 1) return 1;
return 2 * JumpFloorII(target - 1);
}