我正在处理一个递归函数,它似乎返回了错误的值而不是预期的值。我能够复制它并将功能简化为:
function foo(i, target){
if(i < target){
i++;
foo(i, target);
}
return i;
}
console.log(foo(0,5));
基本上,鉴于上面的函数,我希望返回值为5.但是,它似乎返回1.当我进行一些跟踪时,我注意到“return i”被调用了几次,每次都得到减1?这种行为的原因是什么,我该怎么做才能解决它?
答案 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)
您没有返回递归调用的值
function foo(i, target){
if(i < target){
i++;
return foo(i, target);
}
return i;
}
console.log(foo(0,5));
&#13;
答案 2 :(得分:2)
您还必须向递归函数调用提供return
:
return foo(i, target);
function foo(i, target) {
if (i < target) {
i++;
// Change here...
return foo(i, target);
}
return i;
}
console.log(foo(0, 5));
&#13;