【问题标题】:RangeError: Maximum call stack size exceeded. Why?RangeError:超出最大调用堆栈大小。为什么?
【发布时间】:2021-11-24 21:12:53
【问题描述】:
    const http = require('http');
const fs = require('fs');
const url = require('url');
const hostname = 'xxxx';
const port = xxxx;


const server = http.createServer((req, res) => {
    let parsedUrl = url.parse(req.url, true);
    var qdata = parsedUrl.query;
    let n = parseInt(qdata.n);
    console.log(n);
    if (n <= 0) {
        res.writeHeader(500, {
            'Content-Type': 'text/plain',
        });
        res.write("Fuer n wurde kein gueltiger Parameter uebergeben!");
    }
    else {
        res.writeHeader(200, {
            'Content-Type': 'text/plain',
        });
        function fibonacci(num) {
  if (num <= 1) return 1;

  return fibonacci(num - 1) + fibonacci(num - 2);
}
        res.write("Die " + n + "-te Fibonacci Zahl lautet " + fibonacci(n));
    }


    res.end();
});

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

如果我运行此代码,我会收到错误 RangeError:超出最大调用堆栈大小。但为什么?它发生在我用 9 调用它时,斐波那契在这么小的数字上应该不是问题。

【问题讨论】:

  • 嗨,您似乎缺少一些代码(我收到语法错误)
  • 用 1 调用它会发生什么? (你怎么称呼它?)
  • 你输入的num是什么值?
  • 事情是这样的:当我第一次调用它时,它显示了正确的值。但如果我再试一次,我就会得到错误。

标签: javascript node.js


【解决方案1】:

这里有两个问题:1. 让它运行,2. 让它正常运行。

1。 您正在错误地解析数据,因此 let n = parseInt(qdata.n); 会返回 undefined。回调是服务器启动后执行的函数。这意味着即使在您输入数字之前,您的服务器就在运行斐波那契数列。

因为它已经在解析数据,所以它解析n,当然是undefined。将其解析为 Int,您将得到 NaN。这是一个问题,因为Nan-1Nan-2 总是返回Nan,这意味着您在服务器启动时进入了无限。

要解决这个问题,您应该检查 n 是否存在:

if(String(n) !== String(NaN) {
  ...
}
  1. 效率:像这样计算斐波那契数列会导致很大的问题。我会看看dynamic programming

【讨论】:

  • 成功了,谢谢!
猜你喜欢
  • 2014-04-03
  • 2018-02-06
  • 1970-01-01
  • 2021-05-30
  • 2021-07-11
  • 2019-07-05
  • 2015-04-26
相关资源
最近更新 更多