为什么JavaScript递归拼接n到1字符串的函数仅返回1
错误原因
- 首先,
outputStr + n是无效语句:字符串拼接的结果没有赋值给任何变量,执行完后outputStr的值仍然是空字符串,这行代码没有任何实际作用。 - 其次,else分支的返回逻辑完全丢弃了当前层级的n值:你直接返回了
numStr(n-1)的执行结果,没有把当前的n拼入返回值中。
执行过程示例(以传入5为例)
- 调用
numStr(5),进入else分支,无效拼接执行后,直接返回numStr(4)的结果 - 调用
numStr(4),进入else分支,无效拼接执行后,直接返回numStr(3)的结果 - 调用
numStr(3),进入else分支,无效拼接执行后,直接返回numStr(2)的结果 - 调用
numStr(2),进入else分支,无效拼接执行后,直接返回numStr(1)的结果 - 调用
numStr(1),命中终止条件,返回字符串'1'
所有上层递归调用都直接把下层的返回值原样返回,没有做任何拼接处理,最终输出的结果自然只有'1'。
你修改后的写法return outputStr + n + numStr(n-1)是正确的,每次递归都会把当前的n值和下一层递归返回的字符串拼接后再返回,最终就能得到n到1倒序拼接的字符串。
内容的提问来源于stack exchange,提问作者J.S
相关产品推荐
相关产品推荐

