Python递归函数返回None问题:如何正确返回列表首个元素?
问题解决:递归函数返回None的原因及修复
你的代码问题出在递归调用没有返回结果:当列表长度大于1时,处理完石头后你调用了self.lastStoneWeight(stones),但没有把这个递归调用的返回值传递回去。虽然最底层的递归(列表长度为1时)正确返回了stones[0],但上层函数没有把这个值返回,导致整个函数最终返回默认的None。
修复方法
在递归调用的那一行加上return,让每一层递归都把结果向上传递:
class Solution: def lastStoneWeight(self, stones) -> int: if len(stones) == 1: print(stones[0]) return stones[0] s = max(stones) stones.remove(s) v = max(stones) stones.remove(v) l = s - v stones.append(l) # 新增return,传递递归结果 return self.lastStoneWeight(stones) stone_list = [2,7,4,1,8,1] # 避免用list当变量名,会覆盖内置类型 s = Solution() print(s.lastStoneWeight(stone_list))
额外提示
不要使用list作为变量名,这会覆盖Python的内置list类型,可能导致后续代码出现意想不到的错误,改用stone_list这类更具语义的名字更稳妥。
内容的提问来源于stack exchange,提问作者Alidiab
相关产品推荐
相关产品推荐

