【发布时间】:2019-07-16 14:11:17
【问题描述】:
我正在尝试编写一个使用递归组合两个字符串的函数。我的代码在下面,但我不知道为什么函数返回 undefined 特别是当我在基本情况下使用 console.log 并且它不打印 undefined 而是打印正确的值。
var str3=""
function merge(str1,str2){
if(str1.length==0||str2.length==0){
console.log(str3)
return str3;
}
else{
str3=str3+str1.substring(0,1)+str2.substring(0,1);
merge(str1.substring(1,str1.length),str2.substring(1,str2.length))
}
}
merge("AAA","BBB") //--> returns undefined but the console.log(str3) gives correct answer
【问题讨论】:
-
msdn.microsoft.com/en-us/library/wwbyhkx4(v=vs.94).aspx 这有一个很好的基本示例。正如其他人所说,return 应该可以解决问题。
-
除了在替代情况下缺少
return之外,您已经污染了,因此连续调用将返回以最后一个结果为前缀的结果。例如。merge("CDE","123"); //==> "ABABABC1D2E3" -
您是否尝试过使用调试器遍历您的代码?那很快就会出现问题。
-
合并递归调用前,检查函数返回的字符数是否大于1。
标签: javascript recursion