递归算法返回值疑问:为何首函数返回1而非None?
递归函数返回值与None的解析
第一个函数为什么返回1?
先拆解第一个递归函数的执行流程:
- 调用
test([1,2,3]),数组长度为3≠1,执行return test([1,2]) - 进入
test([1,2]),长度为2≠1,执行return test([1]) - 进入
test([1]),长度等于1,直接return 1 - 这个1会返回给上一层的
test([1,2]),test([1,2])拿到1后,把这个1原样返回给最开始的test([1,2,3]) - 初始调用最终得到这个1,所以函数返回1。
整个递归过程中,每一层的return都是把下一层的返回值原封不动向上传递,最终初始调用拿到的就是最底层返回的1,自然不会是None或报错。
修改后的函数为什么输出1和None?
问题出在你把return test(...)改成了return print(test(...))——print()函数本身的返回值是None,不管它打印了什么内容。
具体执行流程:
- 同样,
test([1,2,3])调用test([1,2]),test([1,2])调用test([1]) test([1])返回1,这个1被传给test([1,2])里的print(),控制台输出1- 但
print(1)执行完后,它自身的返回值是None,所以test([1,2])返回的是这个None - 初始调用
test([1,2,3])拿到这个None,执行print(None),控制台再输出None - 最终你看到的输出就是先
1,再None。
这里的None是什么含义?
在Python中,None是一个特殊的单例对象,用来表示“无值”或者“没有有效返回结果”:
- 任何没有写return语句的函数,默认会返回None
- 如果写了
return但后面没有跟任何值,也会返回None - print()函数的设计就是只负责输出内容到控制台,它本身没有有意义的返回值,所以固定返回None。
内容的提问来源于stack exchange,提问作者spacedustpi
相关产品推荐
相关产品推荐

