写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。
斐波那契数列的定义如下:
F(0) = 0, F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。
public class Test10{
public static int fib1(int n) {
//方法一,递归花费时间较多
if (n <= 1) {
return n;
}
return fib1(n - 1) + fib1(n - 2);
}
public static int fib2(int n) {
//方法二,使用循环代替递归
if (n <= 2) return n;
//定义数组来存贮数列每一项的值
int[] arr = new int[n + 1];
arr[1] = 1;
for (int i = 2; i <= n; i++)
arr[i] = (arr[i - 1] + arr[i - 2]) % 1000000007;//防止数值过大越界
return arr[n];
}
public static int fib3(int n) {
//方法三,减小空间复杂度
if (n<=1){
return n;
}
int a, b, sum;
a = 1;
b = 0;
for(int i = 0; i < n; i++){
sum = (a + b) % 1000000007;
b = a;
a = sum;
}
return b;
}
public static void main(String[] args) {
System.out.println(fib1(5));
System.out.println(fib2(5));
System.out.println(fib3(5));
}
}
结果: