Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的递归限制有多大?_Javascript_Recursion - Fatal编程技术网

javascript中的递归限制有多大?

javascript中的递归限制有多大?,javascript,recursion,Javascript,Recursion,我想这是为了阻止浏览器一直被无用的代码钉住,但是: function print(item) { document.getElementById('output').innerHTML = document.getElementById('output').innerHTML + item + '<br />'; } function recur(m

我想这是为了阻止浏览器一直被无用的代码钉住,但是:

        function print(item) {
            document.getElementById('output').innerHTML = 
               document.getElementById('output').innerHTML
               + item + '<br />';
        }

        function recur(myInt) {
            print(myInt);
            if (int < 10) {
                for (i = 0; i <= 1; i++) {
                    recur(myInt+1);
                }
            }
        }
而不是当我这样做的时候,我所得到的大混乱:

        function recur(myInt) {
            print(myInt);
            if (int < 10) {
                for (i = 0; i <= 1; i++) {
                    var x = myInt + 1;
                    setTimeout("recur("+x+")");
                }
            }
        }
函数重现(myInt){
打印(myInt);
if(int<10){

for(i=0;i递归在JavaScript中几乎没有限制。除非你的树很深,否则它应该很好。大多数树,即使有数百万个元素,也相当宽,所以你最多得到log(n)堆栈上的递归调用,这通常不是一个问题。
setTimeout
当然不需要。在第一个示例中,有时您需要一个guard子句来保证递归达到最底层,这是正确的。

您使用一个全局变量作为循环计数器,这就是为什么它只对最内部的调用完全循环。当您从该调用返回时,计数器已超出所有其他循环的循环端

如果生成局部变量:

function recur(int) {
    print(int);
    if (int < 10) {
        for (var i = 0; i <= 1; i++) {
            recur(int + 1);
        }
    }
}
函数递归(int){
印刷品(国际);
if(int<10){

对于(var i=0;i我知道你做错了什么。函数中的递归保持一定的范围,因此每次循环运行一次,你的迭代器(i)实际上在每个范围内都在增加

function recur(int) {
            print(int);
            if (int < 10) {
                for (var i = 0; i <= 1; i++) {
                    recur(int+1);
                }
            }
        }
函数递归(int){
印刷品(国际);
if(int<10){

for(var i=0;i
if(int<10)
将使if块失败并停止递归。这是任何语言中的预期行为。请避免将变量命名为“int”。虽然它在js中可能是合法的,但它令人困惑,因为它在许多其他语言中是一个保留字。该方法的两个版本应该返回相同的代码,并且它们不会像我预期的那样,第二个版本生成大量的数字,因为该方法调用了自己两次。例如(i=0;i PS.我不知道你从答案中删掉了什么,但是你把它简化成了一个非常奇怪的
for
子句。太好了!谢谢!我知道我遗漏了一些东西…我以前有var,但出于某种原因,我删除了它!当我删除var时,我认为这会把它放在全局范围内,这很愚蠢,不是吗..啊,我是的仍然在学习JS;-)这没有解决范围问题,这是他困难的根源
function recur(int) {
            print(int);
            if (int < 10) {
                for (var i = 0; i <= 1; i++) {
                    recur(int+1);
                }
            }
        }