javascript递归返回错误的值

时间:2017-12-01 09:36:09

标签: javascript recursion

我正在处理一个递归函数,它似乎返回了错误的值而不是预期的值。我能够复制它并将功能简化为:

function foo(i, target){    
    if(i < target){
        i++;
        foo(i, target);
    }

    return i;   
}
console.log(foo(0,5));

基本上,鉴于上面的函数,我希望返回值为5.但是,它似乎返回1.当我进行一些跟踪时,我注意到“return i”被调用了几次,每次都得到减1?这种行为的原因是什么,我该怎么做才能解决它?

3 个答案:

答案 0 :(得分:5)

您还需要从代码中的if部分返回。

function foo(i, target){    
    if(i < target){
        i++;
        return foo(i, target);
    }
   
    console.log(i);
    return i;   
}

console.log(foo(0,5));

为什么您的代码返回1?

因为它只在foo之后每次调用i < target,然后在它之后获得嵌套调用返回的所有值,顺序为5, 4, 3, 2, 1,最后一个从第一个函数返回打印电话。您可以在console.log之前添加简单return i来检查这一点,并与上述结果进行比较。

function foo(i, target){    
    if(i < target){
        i++;
        foo(i, target);
    }
   
    console.log(i);
    return i;   
}

console.log(foo(0,5));

要显示返回的值,您可以看到

 console.log()                               console.log()
 |   Call with 1                             -- return Call with 1
 |   |   Call with 2                            -- return Call with 2
 |   |   |   Call with 3                           -- return Call with 3
 |   |   |   |   Call with 4                          -- return Call with 4
 |   |   |   |   |   Call with 5        VS               -- return Call with 5  
 |   |   |   |   |   return 5
 |   |   |   |   return 4
 |   |   |   return 3
 |   |   return 2
 |-- return 1

答案 1 :(得分:2)

您没有返回递归调用的值

&#13;
&#13;
function foo(i, target){    
    if(i < target){
        i++;
        return foo(i, target);
    }

    return i;   
}
console.log(foo(0,5));
&#13;
&#13;
&#13;

答案 2 :(得分:2)

您还必须向递归函数调用提供return

return foo(i, target);

&#13;
&#13;
function foo(i, target) {
  if (i < target) {
    i++;
    // Change here...
    return foo(i, target);
  }
  return i;
}
console.log(foo(0, 5));
&#13;
&#13;
&#13;