3 回答
TA贡献1895条经验 获得超7个赞
到目前为止,已经提出的方法(使用额外的参数将列表传递到递归链中)的一种替代解决方案是在您从递归返回时构建最终列表。这并不是非常有效,因为连接列表需要同时复制它们,但是它可以工作:
def problem_a(n):
if n == 1:
return [n]
elif n % 2 == 0:
return [n] + problem_a(n // 2)
else:
return [n] + problem_a(3*n + 1)
TA贡献1811条经验 获得超5个赞
您可以定义局部变量answer,然后在递归调用中传递它。
def problem_a(n, answer = None):
answer = [n] if answer is None else answer
if n == 1:
return answer
elif n % 2 == 0:
n = n/2
answer.append(n)
else:
n = n*3 + 1
answer.append(n)
return problem_a(n, answer)
print problem_a(7)
输出:
[7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
TA贡献1804条经验 获得超8个赞
您可以尝试使用发电机:
def problem_a(n):
yield n
if n == 1:
return
elif n % 2 == 0:
x = n / 2
else:
x = n * 3 + 1
for y in problem_a(x):
yield y
print list(problem_a(7))
添加回答
举报