我現在正在研究遞回,嘗試使用它時我的頭快要爆炸了。
如果lst = [-1, -4, 0, 3, 6],我的預期輸出是result = [3, 6]。
我試過這個,
def positive(lst):
result = []
if not lst:
return result
else:
if lst[0] > 0:
result.append(lst[0])
return positive(lst[1:])
但輸出是空串列。像結果 = [ ]。
uj5u.com熱心網友回復:
在您的遞回部分,positve()始終回傳對自身的進一步呼叫。因此,您總是得到最終呼叫的結果positive(),即一個空串列。
不改變您的界面的解決方案如下,但每次都移動串列為代價。
def positive(lst):
result = []
if lst:
if lst[0] > 0:
result.append(lst[0])
result.extend(positive(lst[1:]))
return result
lst = [-1, -4, 0, 3, 6]
print(positive(lst))
# [3, 6]
編輯:因為我們每次最多添加一個值,我們可以使用insert而不是extend更新result成本更低。
def positive2(lst):
if not lst:
return []
result = positive2(lst[1:])
if lst[0] > 0:
result.insert(0, lst[0])
return result
uj5u.com熱心網友回復:
您沒有通過遞回傳遞快取
def positive(lst, result):
if not lst:
return result
else:
if lst[0] > 0:
result.append(lst[0])
return positive(lst[1:], result)
lst_in = [-1, -4, 0, 3, 6]
result = []
res = positive(lst_in, result)
print(res)
在您的版本中,結果的范圍僅限于單個函式執行。您需要有一個公共快取(在您的案例結果串列中)。您可以通過將其傳遞給每個函式或在全域范圍內定義它來做到這一點
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/523494.html
標籤:Python递归
