fibonacci数列的两种实现

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的增加而线性增加;递归实现
花费的时间则是呈指数形式增加。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,215评论 18 399
  • 一、 1、请用Java写一个冒泡排序方法 【参考答案】 public static void Bubble(int...
    独云阅读 1,555评论 0 6
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 14,073评论 0 89
  • 贪心算法 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上...
    fredal阅读 9,483评论 3 52
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 13,057评论 0 33

友情链接更多精彩内容