gpt4 book ai didi

javascript - 递归和循环 - 超出最大调用堆栈

转载 作者:行者123 更新时间:2023-11-28 19:51:50 25 4
gpt4 key购买 nike

我正在尝试构建一个函数,将字符串中的所有数字相加...例如,“dlsjf3diw62”最终会是 65。

我尝试变得聪明并组合了一个递归函数:

function NumberAddition(str) { 
var numbers='1234567890';
var check=[];
str=str.split[''];
function recursive(str,check) {
if (str.length==0)
return check;
else if (numbers.indexOf(str[0])>=0)
{
for (i=0;i<str.length;i++){
if (numbers.indexOf(str[i])<0)
check.push(str.slice(0,i));
str=str.slice(i);
return recursive(str,check);
}
}
else
str.shift();
return recursive(str,check);
}

您会看到我正在尝试将我的数字作为数组返回到名为 check 的数组中。不幸的是,我超出了最大调用堆栈大小,我不知道为什么!递归确实有一个基本情况!一旦 str 不再有任何内容,它就会结束。为什么这不起作用?我有什么遗漏的吗?

-将

最佳答案

您可以通过使用正则表达式的更简单的解决方案来实现相同的目标,如下所示:

var str = 'dlsjf3diw62';
var check = str.match(/\d+/g); // this pattern matches all instances of 1 or more digits

然后,要对数字求和,您可以执行以下操作:

var checkSum = 0;
for (var i = 0; i < check.length; i++) {
checkSum += parseInt(check[i]);
}

或者,稍微更紧凑:

var checkSum = check.reduce(function(sum, num){ return sum + parseInt(num) }, 0);

关于javascript - 递归和循环 - 超出最大调用堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23312348/

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