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