一、先要回答一个问题:什么是婓波那契数列?答案在这里:http://zh.wikipedia.org/wiki/%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%E6%95%B0%E5%88%97
二、看代码:
1)第一方法:递归实现:
public static void main(String[] args) {
for (int i = 0; i <= 10; i++) {
System.out.print(fibonacci(i));
System.out.print('\t');
}
}
public static int fibonacci(int i) {
if (i == 0) {
return 0;
} else if (i == 1) {
return 1;
}
return fibonacci(i - 2) + fibonacci(i - 1) ;
}
2)第二种方法:循环实现:
public static void main(String[] args) {
int[] arr = {0,0};
for (int i = 0; i <= 10; i++) {
int result = 0;
if (i == 0) {
arr[0] = 0;
result = 0;
} else if (i == 1){
arr[1] = 1;
result = 1;
} else {
result = arr[0] + arr[1];
arr[0] = arr[1];
arr[1] = result;
}
System.out.print(result);
System.out.print('\t');
}
}
大家还有更好的实现方法吗?
再更新一种实现方式:面试时,要求输入一个数n,打印出婓波那契数列第n个数的值,要求空间复杂度是:O(1),时间复杂复没有限制。代码如下:
private static long sampleFib(long n) {
long min = 0 ,max = 1,result = 0;
if (n <= 1) {
result = min;
} else if (n == 2) {
result = max;
} else {
for (int i = 3; i <= n; i++) {
result = min + max;
min = max;
max = result;
}
}
return result;
}