You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归算法返回值疑问:为何首函数返回1而非None?

递归函数返回值与None的解析

第一个函数为什么返回1?

先拆解第一个递归函数的执行流程:

  1. 调用test([1,2,3]),数组长度为3≠1,执行return test([1,2])
  2. 进入test([1,2]),长度为2≠1,执行return test([1])
  3. 进入test([1]),长度等于1,直接return 1
  4. 这个1会返回给上一层的test([1,2]),test([1,2])拿到1后,把这个1原样返回给最开始的test([1,2,3])
  5. 初始调用最终得到这个1,所以函数返回1。

整个递归过程中,每一层的return都是把下一层的返回值原封不动向上传递,最终初始调用拿到的就是最底层返回的1,自然不会是None或报错。

修改后的函数为什么输出1和None?

问题出在你把return test(...)改成了return print(test(...))——print()函数本身的返回值是None,不管它打印了什么内容。

具体执行流程:

  1. 同样,test([1,2,3])调用test([1,2]),test([1,2])调用test([1])
  2. test([1])返回1,这个1被传给test([1,2])里的print(),控制台输出1
  3. 但print(1)执行完后,它自身的返回值是None,所以test([1,2])返回的是这个None
  4. 初始调用test([1,2,3])拿到这个None,执行print(None),控制台再输出None
  5. 最终你看到的输出就是先1,再None。

这里的None是什么含义?

在Python中,None是一个特殊的单例对象,用来表示“无值”或者“没有有效返回结果”:

  • 任何没有写return语句的函数,默认会返回None
  • 如果写了return但后面没有跟任何值,也会返回None
  • print()函数的设计就是只负责输出内容到控制台,它本身没有有意义的返回值,所以固定返回None。

内容的提问来源于stack exchange,提问作者spacedustpi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:43:23