在递归函数javascript上获取返回未定义

2024-06-21

我听说递归函数很强大,所以我尝试创建一个函数来增加一个数字,直到达到某些点,而不是通过循环。当它到达时我试图返回该值,但它给出了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 += "&nbsp;";
    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(使用前将#替换为@)

在递归函数javascript上获取返回未定义 的相关文章

随机推荐