剑指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.非递归,效率高
写一个函数,输入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)); } }
相关文章推荐
- 九度剑指Offer面试题9:斐波那契数列(Java题解)
- 【剑指offer】面试题2:实现Singleto模式 java
- 剑指offer-面试题7:俩个栈实现队列(java)
- 剑指offer-面试题7:俩个栈实现队列(java)
- 剑指offer--面试题3:二维数组的查找--Java实现
- 剑指offer--面试题4:替换空格--Java实现
- 剑指offer--面试题6:重建二叉树--Java实现
- 剑指offer--面试题7:用两个栈实现队列--Java实现
- 剑指offer--面试题10:二进制中1的个数--Java实现
- 剑指offer--面试题11:数值的整数次方--Java实现
- 剑指offer--面试题12:打印1到最大的n位数--Java实现
- 剑指offer面试题 java实现版 面试题2 实现Singleton模式
- 剑指offer--面试题13:在O(1)时间删除链表结点--Java实现
- 剑指offer--面试题14:调整数组顺序使奇数位于偶数前面--Java实现
- 剑指offer--面试题15:链表中倒数第K个结点--Java实现
- 剑指offer--面试题16:翻转链表--Java实现
- 剑指Offer--面试题17:合并两个排序的链表--Java实现
- 剑指Offer--面试题18:数的子结构--Java实现
- 剑指offer--面试题20:顺时针打印矩阵--Java实现
- 剑指offer--面试题21:包含min函数的栈--Java实现