第9天 斐波那契数列
2014-01-23 22:24
141 查看
题目:输入一个函数,输入n,求斐波那契数列的第n项。斐波那契数列
参考资料:
《剑指offer》面试题9
/** * 面试题9 * * 使用递归无用步骤太多,而且可能会导致内存溢出 * 使用循环,非倒序而是正序计算结果 * * N的值等于之前两个的结果相加 * * 异常情况: * 输入小于0 * 输入大于int边界(使用long类型) * * * 7种实现方式 * http://www.cnblogs.com/hlxs/archive/2011/07/15/2107389.html * * 2014-1-14 */ public class Fibonacci { /** * 自己想到的实现方式 * * @param n * @return */ public long getValue(int n) { if (n < 0) { // 非合法输入 throw new IllegalArgumentException(); } int index = 0; long leftValue = 0; long rightValue = 0; long value = 0; while (index <= n) { // 也可以使用for实现循环 if (index > 1) { value = leftValue + rightValue; leftValue = rightValue; rightValue = value; } else if (index == 1) { leftValue = 0; rightValue = 1; value = leftValue + rightValue; } else if (index == 0) { } index++; } return value; } /** * 时间复杂度 :O(n) * * @param n */ public int getFibonacciValue(int n) { if (n < 0) { throw new IllegalArgumentException(); } if (n == 0) { return 0; } else if (n == 1) { return 1; } int leftValue = 0; int rightValue = 1; int value = 0; for (int i = 2; i <= n; i++) { value = leftValue + rightValue; leftValue = rightValue; rightValue = value; } return value; } public static void main(String[] args) { Fibonacci fibonacci = new Fibonacci(); System.out.println(fibonacci.getFibonacciValue(0) == 0); System.out.println(fibonacci.getFibonacciValue(1) == 1); System.out.println(fibonacci.getFibonacciValue(2) == 1); System.out.println(fibonacci.getFibonacciValue(3) == 2); System.out.println(fibonacci.getFibonacciValue(4) == 3); System.out.println(fibonacci.getFibonacciValue(5) == 5); System.out.println(fibonacci.getValue(6) == 8); System.out.println(fibonacci.getValue(7) == 13); System.out.println(fibonacci.getValue(8) == 21); System.out.println(fibonacci.getValue(9) == 34); System.out.println(fibonacci.getValue(10) == 55); System.out.println(fibonacci.getValue(80)); System.out.println(fibonacci.getValue(2147483647)); } }
参考资料:
《剑指offer》面试题9
相关文章推荐
- Fibonacci hdu1568 斐波那契数列公式的应用-前四位
- 斐波那契数列
- 输出斐波那契数列的第n项
- javascript 学习 第9天 基本包装类型
- 斐波那契数列
- 斐波那契数列
- 洛谷_P1962_斐波那契数列
- 使用非递归的方式实现斐波那契数列
- 斐波那契数列和应用举例我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- 剑指offer-题9:斐波那契数列
- 斐波那契数列
- js实现斐波那契数列
- 【Java】打印斐波那契数列效率和错误性的问题
- 斐波那契数列
- 2018安徽大学计算机机试1--斐波那契数列
- 递推算法思想(2)——斐波那契数列,银行存息
- 使用递归解决斐波那契数列的性能问题
- 斐波那契数列
- 从斐波那契数列看递归的性能
- “斐波那契数列”问题的递推算法