RecursionError:呼叫 Python 物件時超出最大遞回深度
我正在嘗試將任何奇數添加到“res”并將任何偶數乘以“res”,同時使用遞回遍歷串列。
輸入是:
calc_res([3, 2, 2, 4, 15], 2))
輸出應該是:95
假設第一個元素總是奇數,如果它是 0 則忽略該元素。
我現在的代碼是:
def calc_res(some_list, res):
i = 0
if some_list[i] >= len(some_list):
return
if some_list[i] % 2 != 0:
result = i res
return result calc_res(some_list, res)
if some_list[i] % 2 == 0:
result = i * res
return result calc_res(some_list, res)
print(calc_res([3, 2, 2, 4, 15], 2))
uj5u.com熱心網友回復:
您需要將中間結果作為引數傳遞給下一個遞回呼叫。
當沒有元素存在時,你可以只回傳你傳入的 res。
def calc_res(some_list, res):
if len(some_list) == 0:
# no remaining elements, just return the result.
return res
current_number = some_list[0]
if current_number % 2 != 0:
# this means that calc_res from the remaining of some list.
# and current number's result is added to res, pass to next call.
return calc_res(some_list[1:], res current_number)
else:
if current_number == 0:
return calc_res(some_list[1:], res)
else:
return calc_res(some_list[1:], res * current_number)
uj5u.com熱心網友回復:
這樣的事情可能會更好:
def calc_res(some_list, res, i=0):
if i == len(some_list):
return res
if some_list[i] % 2 != 0:
result = some_list[i] res
else:
result = some_list[i] * res
return calc_res(some_list, result, i 1)
print(calc_res([3, 2, 2, 4, 15], 2))
在這里,我們添加了第三個引數,它是給定呼叫中要處理calc_res()的索引。如果已經到了終點,我們就回傳。否則,我們要么添加或乘以' 的第一個元素,并遞回呼叫更新的結果和遞增的值。isome_listisome_listresisome_listcalc_res()i
其他解決方案是可能的,例如避免i并將較小的切片some_list向下傳遞遞回堆疊,但是沒有切片的方法使用的空間更少。
uj5u.com熱心網友回復:
修改 constantstranger 的答案以忽略 some_list 中的元素(如果其值為 0)給出:
def calc_res(some_list, res, i=0):
if i == len(some_list):
return res
if some_list[i] % 2:
result = some_list[i] res
elif some_list[i]:
result = some_list[i] * res
else:
return res
return calc_res(some_list, result, i 1)
print(calc_res([3, 2, 2, 4, 15, 0], 2))
輸出:95
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/460406.html
上一篇:如果任何一個ifelse陳述句為真,我該如何運行代碼?
下一篇:用單行突出顯示4列中的重復行
