javascript - 超过最大调用堆栈大小 JS
问题描述
我试图理解递归的概念,并想在我的代码中使用它(getUniqueInt 函数):
var getRandomInt = function (min, max) {
return Math.floor(Math.random() * (max - min)) + min;
};
var getChosenNumbers = function (min, max) {
var chosenNumbers = [];
for (var k = min; k <= max; k++) {
chosenNumbers.push(k);
}
return chosenNumbers;
};
var arrayOfNumbers = getChosenNumbers(1, 8);
var getUniqueInt = function (min, max) {
var uniqueNumber;
var randomNumber = getRandomInt(min, max);
if (arrayOfNumbers.indexOf(randomNumber) !== -1) {
uniqueNumber = randomNumber;
arrayOfNumbers.splice(arrayOfNumbers.indexOf(uniqueNumber), 1);
} else {
uniqueNumber = getUniqueInt(min, max);
}
return uniqueNumber;
};
但我最终得到了这个: Uncaught RangeError: Maximum call stack size exceeded
我究竟做错了什么?我的代码(我的意思是递归部分)是否有意义或完全错误?
解决方案
您的代码没有意义,抱歉,这就是原因
设置最小值=0,最大值=10
getRandomInt
返回 0-10 范围内的随机整数getChosenNumbers
返回 int FROM 0-10 的数组,表示 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]arrayOfNumbers
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
现在是
getUniqueInt
根本无法获得 uniq,因为所有可能的随机值getRandomInt
都已经在getChosenNumbers
这就是为什么
else {
uniqueNumber = getUniqueInt(min, max);
}
被称为无限次,因为
arrayOfNumbers.indexOf(randomNumber) !== -1
从来都不是真的
推荐阅读
- ruby-on-rails - 部署成功后active_admin登录失败
- python-3.x - 即使错误停止,Python 日志记录也会继续写入文件
- python - Python:mupdf:dict中的无效键
- javascript - 如何使用 Tailwind CSS 创建左侧固定部分和右侧可滚动部分的 div?
- node.js - NodeJS 确认提示
- javascript - 反应:试图将 index.js 连接到数据库,但它不工作
- asp.net - 错误代码 - 由于 AWS 负载均衡器而将 XML 数据发布到 ASP.Net 申请表时出现 403
- react-native - React-Native webRTC icecandidate
- javascript - 是否可以使用 electron 和 nativefier 来创建原生 iOS App?
- azure-data-factory - 天蓝色数据工厂压缩限制