public class MyFibonacci {
private static class GenerateTask1 implements Runnable {
private final int n;
public GenerateTask1(int n) {
this.n = n;
}
public void run() {
long startTime = System.nanoTime();
String fibonacci = getFibonacciOf(n);
print(fibonacci);
println(" spend " + (System.nanoTime() - startTime) / 1000.0 );
startTime = System.nanoTime();
int num = f(n);
print(num);
println(" spend " + (System.nanoTime() - startTime) / 1000.0);
}
private String getFibonacciOf(int n) {
StringBuilder result = new StringBuilder();
int num0 = 0;
int num1 = 1;
int tmp = 0;
for(int j = 0; j < n; j++) {
if( j < 2 ) {
tmp = j;
}else {
tmp = num0 + num1;
num0 = num1;
num1 = tmp;
}
result.append(tmp);
result.append(",");
}
result.deleteCharAt(result.length() - 1);
return result.toString();
}
private int f(int n) {
if( n < 2 ) {
return n;
}
return f(n - 1) + f(n -2);
}
}
public static void main(String[] args) {
new Thread(new GenerateTask1(40)).start();
}
}
循环与递归花费的时间单位分别是 654.161,514447.014
同时,循环实现花费的时间会随着n的增加而线性增加;递归实现
花费的时间则是呈指数形式增加。