递归函数返回None异常:三参数路径判断递归实现问题
解决递归函数返回None的问题
哈哈,我太懂这种踩坑的感觉了!你说的情况十有八九是递归调用的时候没把结果return出去——虽然分支逻辑确实执行了,但当前函数并没有把递归得到的True/False传递回去,最后走到函数末尾就默认返回None了。
举个直观的例子,先看你可能写错的版本:
def can_reach(graph, start, target): if start == target: # 这里能正确返回True return True for neighbor in graph[start]: # 问题在这:你调用了递归,但没把它的结果返回! can_reach(graph, neighbor, target) # 遍历完邻居后没有明确返回,函数默认返回None
哪怕递归调用在某个分支找到了目标并返回了True,这个结果也没有被当前函数接住并传递给上层调用者,所以上层函数最后只能拿到None。
正确的写法应该是接住递归的结果,或者直接return递归调用的返回值,比如这样:
def can_reach(graph, start, target): if start == target: return True for neighbor in graph[start]: # 接住递归结果,找到目标就立刻返回True reachable = can_reach(graph, neighbor, target) if reachable: return True # 所有邻居都遍历完还没找到,明确返回False return False
核心要点:
- 递归函数的每一个分支路径,都需要有明确的return语句来传递结果
- 当你在循环或条件分支里调用递归时,一定要把递归的返回值传递出去,不能只调用不处理
这样修改后,函数就能正确返回预期的True或False了!
内容的提问来源于stack exchange,提问作者D. Powell
相关产品推荐
相关产品推荐

