我想對總和使用分而治之的演算法,但是當我運行我的代碼時,我收到以下訊息
回溯(最后一次呼叫):檔案“ .py”,第 8 行,在 print(Sumlist([10,80,30,60,120,150])) 檔案“ .py”,第 6 行,在 Sumlist 回傳 Sumlist(thelist[: mid]) Sumlist(thelist[mid:]) 檔案“ .py”,第 6 行,在 Sumlist 中回傳 Sumlist(thelist[:mid]) Sumlist(thelist[mid:]) 檔案“ .py”,第 6 行,在 Sumlist 中 return Sumlist(thelist[:mid]) Sumlist(thelist[mid:]) [上一行重復了 995 次以上] 檔案“***.py”,第 2 行,在 Sumlist 中 if thelist==[]: RecursionError : 比較超過最大遞回深度
def Sumlist(thelist):
if thelist==[]:
return 0
else:
mid=len(thelist)//2
return Sumlist(thelist[:mid]) Sumlist(thelist[mid:])
print(Sumlist([10,80,30,60,120,150]))
uj5u.com熱心網友回復:
您的代碼正在進入無限遞回,因為當串列中有 1 個元素時沒有基本情況。
對于len(thelist) == 1,它無限地分為 2 個長度為 0 和 1 的串列。
以下代碼應該可以作業:
def Sumlist(thelist):
if not thelist:
return 0
if len(thelist) == 1:
return thelist[0]
mid=len(thelist)//2
return Sumlist(thelist[:mid]) Sumlist(thelist[mid:])
print(Sumlist([10,80,30,60,120,150]))
uj5u.com熱心網友回復:
基本情況還可以檢查“mid == 0”是否并終止遞回呼叫。代碼可能是;
def sum_list(the_list):
if the_list == []:
return 0
mid = int(len(the_list) / 2)
if mid == 0:
return the_list[mid]
else:
return sum_list(the_list[:mid]) sum_list(the_list[mid:])
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/471205.html
上一篇:笛卡爾積,但洗掉重復回圈排列
