一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路:这个问题归根结底还是一个费布拉奇数列,设跳法为f(n),则当青蛙第一次跳一级台阶时,剩下n-1个台阶,有f(n-1)种跳法,当青蛙第一次跳二级台阶时,剩下n-2个台阶,有f(n-2)种跳法。
故得到数学关系:f(n) = f(n-1) + f(n-2);
第一种:递归实现
int f(int n) {
if (n == 1 || n == 2)
return n;
else
return f(n - 1) + f(n - 2);
}
第二种:非递归实现
public static int calc3(int n) {
if (n == 1 || n == 2)
return n;
int s1 = 1, s2 = 2, s3 = 1;
for (int i = 3; i <= n; ++i) {
s3 = s1 + s2;
s1 = s2;
s2 = s3;
}
return s3;
}