gpt4 book ai didi

javascript - 递归函数中的调用堆栈大小 : Maximum call stack size is lower than expected

转载 作者:行者123 更新时间:2023-11-29 21:37:10 25 4
gpt4 key购买 nike

我正在寻找我编写的递归算法中的问题。

此算法会在某些输入上抛出 RangeError: Maximum call stack size exceeded(在 Chrome 中)错误。但是我追踪到的调用栈大小只有 6k-9k 左右。

This test ( from this SO answer ) 表示 Chrome 中的最大调用堆栈大小约为 42k。


在运行一些测试后,我发现,在递归函数上设置参数似乎会降低可用的调用堆栈大小:

有参数:~31k(Chrome,Edge ~15k)上超过调用堆栈大小

var recursionA = function(a, b) {
count++;
if (count < 100000) {
recursionA(a, b);
}
}

没有参数:~42k(Chrome,Edge ~16.5k)上超过调用堆栈大小

var recursionB = function() {
count++;
if (count < 100000) {
recursionB();
}
}

See fiddle here

  1. 谁能解释一下,为什么在使用参数调用函数时可用的调用堆栈大小明显变小。
  2. 由于我的递归函数需要 2 个参数:我如何利用浏览器的最大调用堆栈大小?
  3. 还有其他因素可能会减少可用调用堆栈的大小吗?

最佳答案

  1. 堆栈的大小是一定数量的字节,而不是一定数量的函数调用。您添加到函数调用中的每个参数都会消耗一些内存,因此可用堆栈更少;
  2. 见上1
  3. 调用的函数中的变量

关于javascript - 递归函数中的调用堆栈大小 : Maximum call stack size is lower than expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34570551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com