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))
添加回答
舉報