描述
斐波那契数列, * 应用1:矩形覆盖,n个2*1小矩形覆盖2*n的大矩形,有多少种方法 * 应用2:跳台阶,可以跳1列或者2列,跳n阶有多少种方法
例子
Input:
Output:
思路
f(n) = n; n = 0,1
f(n) = f(n-1) + f(n-2); n > 1
方法一:递归实现
方法二:使用一个数组存放所用的数据
方法三:发现第n项只与相邻的前两项有关,故只用存储前两项数据即可。
代码
public class Demo009 {
public static void main(String[] args) {
System.out.println(fibonacci(10));
System.out.println(fibonacci2(10));
System.out.println(fibonacci3(10));
}
public static int fibonacci(int n) {
if (n == 0) {
return 0;
} else if (n == 1) {
return 1;
} else
return fibonacci(n-1) + fibonacci(n-2);
}
// 0 1 2 3 4 5 6 7 8 9 10
// 0 1 1 2 3 5 8 13 21 34 55
public static int fibonacci2(int n) {
if (n <= 1) {
return n;
}
int [] fib = new int[n+1];
fib[0] = 0;
fib[1] = 1;
for (int i = 2; i <= n; i++) {
fib[i] = fib[i-1] + fib[i-2];
}
return fib[n];
}
public static int fibonacci3(int n) {
if (n <= 1) {
return n;
}
int temp1 = 0, temp2 = 1;
int result = 0;
for (int i = 2; i <= n; i++) {
result = temp1 + temp2;
temp1 = temp2;
temp2 = result;
}
return result;
}
}