您的位置:首页 > 职场人生

剑指offer--面试题9:斐波那契数列--Java实现

2015-05-06 21:56 656 查看
题目描述:

写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列定义如下

F(0)=0

F(1)=1

F(n) = F(n-1)+ F(n-2)(n≧2)

思路:

1.递归,但是数值太大容易栈溢出,大量重复计算,效率低下

2.非递归,效率高

import java.math.BigInteger;

public class Fibonacci {

//递归算法
public  static BigInteger fibonacci(int n){
if(n == 1){
return BigInteger.valueOf(1);
}
if(n <= 0){
return BigInteger.valueOf(0);
}

return fibonacci(n - 1).add(fibonacci(n - 2));

}
//非递归算法
public static BigInteger fibonacciAdvance(int n){
int[] result = {0, 1};
if(n < 2){
return BigInteger.valueOf(result
);
}

BigInteger fibNMinusOne = BigInteger.ONE;
BigInteger fibNMinusTwo = BigInteger.ZERO;
BigInteger fibN = BigInteger.ZERO;

for (int i = 2; i <= n; i++) {
//f[i] = f[i-1] + f[i-2]
fibN = fibNMinusOne .add(fibNMinusTwo);
//f[i-2] = f[i-1]
fibNMinusTwo = fibNMinusOne;
//f[i-1] = f[i]
fibNMinusOne = fibN;
}
return fibN;

}
public static void main(String[] args) {

System.out.println(fibonacci(20));
System.out.println(fibonacciAdvance(20));

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: