您的位置:首页 > 其它

第9天 斐波那契数列

2014-01-23 22:24 141 查看
题目:输入一个函数,输入n,求斐波那契数列的第n项。斐波那契数列

/**
*  面试题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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: