Javascript jQuery中的递归——数字命理
我试图让递归函数在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.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)创建一个新的组合数字该如何减少数字?目前,该方法所做的唯一缩减是,如果数字为三位数或更多,则获取前两位数。你做这件事的奇怪方式表明,实际上还有其他的意图。