题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
很明显,这是一个斐波那契数列,可表示为:
可以用递归和迭代两种解法。其中,递归解法效率非常低下,有大量重复计算,随着N的增长时间复杂度呈指数增长,为。而迭代的解法采取自底向上的思路,逐个计算,每个f值只需计算一次,时间复杂度为,大大提高了运算速度。
// 解法一:递归
public long Fibonacci(int n) {
if (n <= 0)
return 0;
if (n == 1)
return 1;
return Fibonacci(n-1) + Fibonacci(n-2);
}
// 解法二:迭代
public static long Fibonacci(int n) {
if (n <= 0)
return 0;
if (n == 1)
return 1;
long first = 0;
long second = 1;
long sum = 0;
for (int i=2; i<=n; i++) {
sum = first + second;
first = second;
second = sum;
}
return sum;
}