word.exe已停止使用递归工作

时间:2019-05-13 12:04:41

标签: c++ recursion

当我在else节中删除return时,代码抛出word.exe已停止工作 我尝试调试,并且当基本条件为真且“ i”等于1时,“ i”开始递减

string o = "555";
string play(int i){
    if(i == 3) return o;
    else
        return play(i+1);
}

1 个答案:

答案 0 :(得分:2)

您无法删除return语句。

实际上,play()返回一个string。因此,如果条件为true,则返回string o。但是,如果输入else块,则还必须返回一个string,因为如果条件play(i+1)成功,则string将返回一个字符串,否则将不返回任何字符串(运行另一个调用除外)。而且您什么也不想得到,您想要得到结果string

换句话说,当子功能返回int时,当前功能需要将其传递给其父功能,依此类推。如果子函数条件成功并且您错过了return语句,则您永远不会将该结果传递给父函数,最后,您将不会在顶部返回任何内容(意外的行为或错误,老实说我没有尝试过。)


顺便说一句,您正在运行的代码非常危险。如果3传递的参数大于play(),则递归将无休止地运行,添加let inject = (str, obj) => str.replace(/\${(.*?)}/g, (x,g)=> obj[g]); 调用,直到内存用完。

我希望它能回答您的问题:)