一、問題描述:一只青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上一個n級的台階總共需要多少種跳法。
思路:首先考慮n等於0、1、2時的特殊情況,f(0) = 0 f(1) = 1 f(2) = 2 其次,當n=3時,青蛙的第一跳有兩種情況:跳1級台階或者跳兩級台階,假如跳一級,那么 剩下的兩級台階就是f(2);假如跳兩級,那么剩下的一級台階就是f(1),因此f(3)=f(2)+f(1) 當n = 4時,f(4) = f(3) +f(2),以此類推...........可以聯想到Fibonacci數列。 因此,可以考慮用遞歸實現。但是遞歸算法效率低下,也可考慮迭代實現。
1、遞歸算法
public static long Faci(long n) { if (n==0) { return 0; } if (n==1) { return 1; } if (n==2) { return 2; } else { return Faci(n - 1) + Faci(n - 2); } }
2、迭代算法
public static long JumpFloor(long n) { long former1 = 1; long former2 = 2; long target = 0; if (n==0) { return 0; } if (n==1) { return 1; } if (n==2) { return 2; } else { for (int i = 3; i <= n; i++) { target = former1 + former2; former1 = former2; former2 = target; } return target; } }
3、分析結果
用遞歸算法是,當n大於40時,非常的滿。用迭代算法的話,基本上是立刻得到答案。
二、問題描述:一只青蛙一次可以跳上1級台階,也可以跳上2級,也可以跳三級。求該青蛙跳上一個n級的台階總共需要多少種跳法。
1、迭代算法
/ public static long JumpFloor(long n) { long number1 = 1; long number2 = 2; long number3 = 4; long target = 0; if (n==0) { return 0; } if (n==1) { return 1; } if (n==2) { return 2; } if (n==3) { return 4; } else { for (int i = 4; i <= n; i++) { target = number1 + number2 + number3; number1 = number2; number2 = number3; number3 = target; } return target; } }
