Javascript Coursera Node.js斐波那契实现
我目前正在为coursera上提供的创业工程课程学习项目2 我正在使用AmazonWeb服务和ubuntu实例进行编程,我的编程经常挂起。我的node.js程序可能有问题,但我似乎找不到它 该程序旨在生成前100个用逗号分隔的斐波那契数Javascript Coursera Node.js斐波那契实现,javascript,node.js,amazon-web-services,time-complexity,fibonacci,Javascript,Node.js,Amazon Web Services,Time Complexity,Fibonacci,我目前正在为coursera上提供的创业工程课程学习项目2 我正在使用AmazonWeb服务和ubuntu实例进行编程,我的编程经常挂起。我的node.js程序可能有问题,但我似乎找不到它 该程序旨在生成前100个用逗号分隔的斐波那契数 #! /usr/bin/env node //calculation var fibonacci = function(n){ if(n < 1){return 0;}
#! /usr/bin/env node
//calculation
var fibonacci = function(n){
if(n < 1){return 0;}
else if(n == 1 || n == 2){return 1;}
else if(n > 2){return fibonacci(n - 1) + fibonacci(n-2);}
};
//put in array
var firstkfib = function(k){
var i;
var arr = [];
for(i = 1; i <= k; i++){
arr.push(fibonacci(i));
}
return arr
};
//print
var format = function(arr){
return arr.join(",");
};
var k = 100;
console.log("firstkfib(" + k +")");
console.log(format(firstkfib(k)));
然后程序挂起我不知道您是否熟悉算法分析,但是,事实证明,您的程序的运行时间是指数级的。这基本上意味着,随着输入的增加,运行程序所需的时间呈指数增长。(如果我的解释不太清楚,请检查) 事实证明,这种运行时间是有限的。例如,如果为
k=1
运行程序需要1 ms,则为k=100
运行程序需要2^100 ms
。结果证明这是一个错误
在任何情况下,正如Zhehao所指出的,解决方案是保存
fib(n-1)
和fib(n-2)
(例如,在数组中),并重用它来计算fib(n)
。查看麻省理工学院的视频讲座(前15分钟)。您可能想尝试在计算数字时打印出来,而不是在最后打印出整个列表。有可能是计算挂在这条线上的某个地方
另一方面,这可能是计算斐波那契数列表最低效的方法。您先计算斐波那契(n),然后再计算斐波那契(n+1),而不重用前面计算中的任何工作。你可能想回去重新考虑你的方法。有一种更快更简单的迭代方法。在nodeJS中编写密集的计算代码会导致阻塞。由于斐波那契是一种密集的计算代码,因此可能会导致阻塞。程序不会挂起。。你的循环越来越慢,它能挂多久?我相信斐波那契的风格有一个O(n^2)。所以,只要一个100的小谎,它就会在这个循环中运行10000次。对于99年,它将非常接近于另外10000年,以此类推。
ubuntu@ip-172-31-30-245:~$ node fib.js
firstkfib(100)