我听说递归函数很强大,所以我尝试创建一个函数来增加一个数字,直到达到某些点,而不是通过循环。当它到达时我试图返回该值,但它给出了undefined
.
CODE
var i=1;
function rec(){
i++;
console.log(i);
if(i > 100){
return i;
}else{
rec();
}
}
console.log(rec());
这里的i
递增直到 100。但在限制之后返回 undefined。为什么会发生这种情况?还请让我知道,这种递归很好吗?for
loop?
评论 https://stackoverflow.com/questions/27088739/getting-return-undefined-on-recursive-function-javascript/27088772#comment42684996_27088739 by vaultah https://stackoverflow.com/users/2301450/vaultah是正确的:
var i=1;
function rec(){
i++;
console.log(i);
if(i > 100){
return i;
}else{
return rec();
}
}
snippet.log(rec());
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
我们举个例子,只算> 5
并添加一些输出,以便您可以更轻松地看到发生了什么(但同样,使用调试器单步调试代码是了解其工作原理的正确方法):
var indent = "";
var i=1;
function rec(){
var rv;
i++;
indent += " ";
if(i > 5){
snippet.logHTML("<p>" + indent + i + " > 5, returning " + i + "</p>");
rv = i;
}else{
snippet.logHTML("<p>" + indent + i + " is not > 5, calling rec</p>");
rv = rec();
snippet.logHTML("<p>" + indent + "Got " + rv + " back from rec, returning it</p>");
}
indent = indent.substring(0, indent.length - 6);
return rv;
}
snippet.logHTML("<p>Final result: " + rec() + "</p>");
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)