递归字符串反转函数中print函数如何确定输出内容?
递归字符串反转函数的返回值疑问解答
1. print函数如何确定要打印的返回值?
print只会输出你直接调用的最顶层函数的返回值——也就是print(rev("cabin"))里的rev("cabin")最终返回的结果。递归过程中所有子调用(比如rev("n")、rev("cabi"))的返回值,都是用来拼接成父调用返回值的中间数据,不会被print直接输出,除非你在函数内部主动添加print语句。
2. 为何递归过程中的中间返回值(绿圈标注的)未被打印?
那些绿圈里的是递归链里的子调用返回结果,它们的作用是作为父调用字符串拼接的组成部分。比如rev("n")返回"n",会和rev("cabi")的返回值拼在一起,传给上一层的rev("cabin");而rev("cabi")的返回值又是rev("i")和rev("cab")拼接的结果……这些中间值只会在递归层级间传递、拼接,直到最顶层的rev("cabin")生成完整的"nibac",才会被print输出。它们本身不会被单独打印,因为没有被直接传给print函数。
3. 为何看起来仅rev(s[-1])的结果被输出,而非rev(s[:-1])的?
这是误解,实际输出的是两者拼接后的完整结果。以rev("cabin")为例:
- 它会执行
rev("n") + rev("cabi"),rev("n")返回"n"; rev("cabi")又执行rev("i") + rev("cab"),rev("i")返回"i";- 以此类推,最终所有子调用的返回值会逐层拼接成
"n" + "i" + "b" + "a" + "c",也就是"nibac"。rev(s[-1])的结果只是拼接的开头,后面跟着rev(s[:-1])的完整反转结果,合起来才是最终被print输出的内容,并不是只输出rev(s[-1])。
内容的提问来源于stack exchange,提问作者naga
相关产品推荐
相关产品推荐

