为什么我会得到“过多的递归”

时间:2014-01-20 15:56:45

标签: javascript infinite-loop

我正在尝试构建一个带有两个参数(整数)的函数,并从用户通过表单提供的所有整数构建一个数组。 我在控制台中收到“太多递归”的消息。我猜我有一个无限循环。我如何突破它,所以它只通过.innerHTML打印div中的数组list []?

这是循环函数:

var fNum = parseInt(document.getElementById("first").value);
var sNum = parseInt(document.getElementById("second").value);
var list = []
var i;
    function calculate() {
        for( var i = fNum; i <= sNum; i++){
            list.push(i);
            break;
            document.getElementById('result').innerHTML = list;
        }
        calculate();
    }

这是一个Bin:http://jsbin.com/EcOtUJIx/2/

3 个答案:

答案 0 :(得分:4)

您的函数编写为始终调用自身。该过程无法停止,因此导致“过多的递归”。

该函数在循环中也有一个逻辑错误,在向列表中添加单个值后,总是退出。 break;语句没有条件,因此后续的DOM调用永远不会执行。也就是说,您的代码等同于:

function calculate() {
  list.push(fNum);
  calculate();
}

当然,那个更简单的功能会以完全相同的方式失败。

答案 1 :(得分:1)

将代码修改为

var fNum = parseInt(document.getElementById("first").value);
var sNum = parseInt(document.getElementById("second").value);
var list = [];
function calculate() {
    for( var i = fNum; i <= sNum; i++)
    {
        list.push(i);
    }
    document.getElementById('result').innerHTML = list;
}
calculate();

答案 2 :(得分:0)

可能这就是你需要的一切。您不必使用递归来执行任务。 这是jsbin

function calculate() {
     var fNum = parseInt(document.getElementById("first").value);
     var sNum = parseInt(document.getElementById("second").value);
     var list = new Array()
     for( var i = fNum; i <= sNum; i++){
          list.push(i);
     }
     document.getElementById('result').innerHTML = JSON.stringify(list);
}