问题背景:
一只青蛙一次可以跳上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数列 因此,可以考虑用递归实现。但是递归算法效率低下,也可考虑迭代实现。
递归解决:
int Fib(int n) {
if (1 == n || 2 == n)
return n;
else
return Fib(n - 1) + Fib(n - 2);
}
}
非递归解决:
public static int calc3(int n) {
if (1 == n || 2 == n)
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;
}