【发布时间】:2020-07-10 23:04:34
【问题描述】:
我的目标是编写一个函数,它接收整数列表 - ints - 和求和目标 - s - 并返回列表中前两个整数加起来为 s 的列表按照它们在列表中从左到右出现的顺序。我有函数 print 来控制每次迭代,一切看起来都很好,除了它总是返回None,我不知道怎么做。
我的代码:
def sum_pairs(ints, s, a=0, b=1):
if a == len(ints)-1 or b > 666:
return None
if b < len(ints):
print(s, a,b,[ints[a],ints[b]], ints[a] + ints[b])
if ints[a] + ints[b] == s:
x = ints[a]
y = ints[b]
print([x,y], type([x,y]), [x,y] is None)
return [x, y]
else:
sum_pairs(ints, s, a, b=b+1)
else:
sum_pairs(ints, s, a=a+1, b=a+2)
我什至在 return 语句之前的步骤中检查了 [x,y] 是否为 None 并且它总是返回 False 但不知何故该函数仍然返回 None。有人可以填我吗?我是递归新手,所以问题可能出在那儿。
【问题讨论】:
-
您的函数在一半的情况下缺少
return语句。 -
将 return 放在递归调用的前面:
return sum_pairs(ints, s, a, b=b+1)和return sum_pairs(ints, s, a=a+1, b=a+2)。此外,该算法更容易表述为迭代而非递归 -
克劳斯有正确的答案。不相关,我强烈建议使用调试器。
标签: python list recursion return