当我在else节中删除return时,代码抛出word.exe已停止工作 我尝试调试,并且当基本条件为真且“ i”等于1时,“ i”开始递减
string o = "555";
string play(int i){
if(i == 3) return o;
else
return play(i+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]);
调用,直到内存用完。
我希望它能回答您的问题:)