jQuery中的递归 - 数字命理学

时间:2014-11-25 11:34:56

标签: javascript jquery recursion

我试图让一个递归函数在jQuery中工作,但是我得到了以下异常:

'未捕获RangeError:超出最大调用堆栈大小'

我的理解是,递归函数必须以某种方式无限运行,但我无法弄清楚为什么会发生这种情况。感谢...

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));
});

3 个答案:

答案 0 :(得分:0)

因为你陷入无限循环。您正在呼叫reduceNumber(12)。由于它与第一个if()语句不匹配,因此转到第二个:

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

领导newNumberToReduce成为...... 12!然后调用reduceNumber(12),它会一次又一次地执行相同的操作,直到超出最大堆栈大小。

答案 1 :(得分:0)

第一次调用reduceNumber并传递12

转到功能

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

其他

也是如此

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

所以newNumberToReduce是12

再次调用reduceNumber函数传入12(再次)

因此infinte loop

答案 2 :(得分:0)

更改此行:

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)

创建一个新数字