Javascript Coursera Node.js斐波那契实现

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;}

我目前正在为coursera上提供的创业工程课程学习项目2

我正在使用AmazonWeb服务和ubuntu实例进行编程,我的编程经常挂起。我的node.js程序可能有问题,但我似乎找不到它

该程序旨在生成前100个用逗号分隔的斐波那契数

    #! /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)