Javascript jQuery中的递归——数字命理

Javascript jQuery中的递归——数字命理,javascript,jquery,recursion,Javascript,Jquery,Recursion,我试图让递归函数在jQuery中工作,但遇到以下异常: '未捕获范围错误:超过最大调用堆栈大小' 我的理解是递归函数必须以某种方式无限运行,但我不知道为什么会发生这种情况。谢谢 jQuery.fn.reduceNumber = function(numberToReduce) { if (numberToReduce < 10 || numberToReduce == 11 || numberToReduce == 22 || numberToReduce == 33){ retu

我试图让递归函数在jQuery中工作,但遇到以下异常:

'未捕获范围错误:超过最大调用堆栈大小'

我的理解是递归函数必须以某种方式无限运行,但我不知道为什么会发生这种情况。谢谢

jQuery.fn.reduceNumber = function(numberToReduce) {
if (numberToReduce < 10 || numberToReduce == 11 || numberToReduce == 22 || numberToReduce == 33){
    return numberToReduce;
} else {
    var newNumberToReduce =  numberToReduce.toString().substring(0,1) +   numberToReduce.toString().substring(1,2);
    return ($(this).reduceNumber(newNumberToReduce));
}   
}

$(document).ready(function(){
    $("#foo").html($(this).reduceNumber(12));
});
jQuery.fn.reduceEnumber=函数(numberToReduce){
如果(numberToReduce<10 | | numberToReduce==11 | | numberToReduce==22 | | numberToReduce==33){
返回次数减少;
}否则{
var newNumberToReduce=numberToReduce.toString().substring(0,1)+numberToReduce.toString().substring(1,2);
返回($(this).reduceEnumber(newNumberToReduce));
}   
}
$(文档).ready(函数(){
$(“#foo”).html($(this.reduceEnumber(12));
});

因为你陷入了一个无限循环。您正在调用
reduceEnumber(12)
。因为它与第一个
if()
语句不匹配,所以它转到第二个:

var newNumberToReduce =  numberToReduce.toString().substring(0,1) +   numberToReduce.toString().substring(1,2);

前导
newNumberToReduce
to be<代码>12!然后调用
reduceEnumber(12)
,它一次又一次地执行相同的操作,直到超过最大堆栈大小。

当您第一次调用reduceEnumber并通过12时

它将用于函数

它不小于10,或等于11、22或33

其他人也一样

newNumberToReduce是12(1)的第一个字符和12(2)的第二个字符

所以newNumberToReduce是12

再次调用reduceEnumber函数并传入12(再次)

因此,infinte loop

更改此行:

var newNumberToReduce =  numberToReduce.toString().substring(0,1) +   numberToReduce.toString().substring(1,2);
为此:

var newNumberToReduce =  (numberToReduce.toString().substring(0,1) | 0) +   (numberToReduce.toString().substring(1,2) | 0);

这将根据您的数字(1+2=3)创建一个新的组合数字

该如何减少数字?目前,该方法所做的唯一缩减是,如果数字为三位数或更多,则获取前两位数。你做这件事的奇怪方式表明,实际上还有其他的意图。