我想用一個遞歸函數,總結數字,即Python中,得到數字列表的總和與遞歸
getSum([1, 2, 3, 4, 5])
應該返回1 + 2 + 3 + 4 + 5 = = 15
我不是遞歸函數的專家,我試過類似的東西:
def getSum(piece):
for i in piece
suc += getSum(i)
問題是我無法循環整數。我相信這是一項相當簡單的任務,但我真的無法弄清楚。
我想用一個遞歸函數,總結數字,即Python中,得到數字列表的總和與遞歸
getSum([1, 2, 3, 4, 5])
應該返回1 + 2 + 3 + 4 + 5 = = 15
我不是遞歸函數的專家,我試過類似的東西:
def getSum(piece):
for i in piece
suc += getSum(i)
問題是我無法循環整數。我相信這是一項相當簡單的任務,但我真的無法弄清楚。
你不需要循環。遞歸會爲你做到這一點。
def getSum(piece):
if len(piece)==0:
return 0
else:
return piece[0] + getSum(piece[1:])
print getSum([1, 3, 4, 2, 5])
你也可以使用reduce。 函數reduce(func,seq)將函數func()連續應用於序列seq。它返回一個單一的值。
reduce(lambda x,y: x+y, range(1,6))
爲學術目的(學習Python的),你可以使用遞歸:
def getSum(iterable):
if not iterable:
return 0 # End of recursion
else:
return iterable[0] + getSum(iterable[1:]) # Recursion step
但你不應該在真正的生產代碼中使用遞歸。這樣做效率不高,而且使用內置插件的代碼也不太清晰。對於這種情況,你不需要遞歸和循環。只需使用內置sum:
>>>a = [1, 2, 3, 4, 5]
>>>sum(a)
15
我認爲這是不明確的檢查長度更好一點:
def getSum(piece):
return piece[0] + getSum(piece[1:]) if piece else 0
演示:
>>> getSum([1, 2, 3, 4, 5])
15
如果我要檢查和什麼每次調用函數getSum之後?所以我想檢查一下fe如果總和> 9:做些什麼? –
不適用於空列表。 – uselpa
有沒有要測試的長度== 1. – uselpa