首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >求和分治算法

求和分治算法
EN

Stack Overflow用户
提问于 2022-05-05 13:05:11
回答 2查看 49关注 0票数 -1

我希望对和使用分而治之的算法,但是当我运行我的代码时,我得到以下消息

跟踪(最近一次调用):文件".py",第8行,打印( Sumlist (10,80,30,60,120,150))文件".py",第6行,在Sumlist返回Sumlist(thelist:mid)+ Sumlist (thelistmid:) File ".py",第6行,在Sumlist返回Sumlist(thelist:mid)+Sumlist(thelist:) File ".py",第6行,在Sumlist返回Sumlist(thelist:mid)+Sumlist(thelistmid:)前面重复了995次"***.py",第2行,在Sumlist中,如果thelist==[]:RecursionError:比较超过最大递归深度

代码语言:javascript
复制
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]))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-05 13:19:41

您的代码正在进入无限递归,因为在列表中有一个元素时,没有基本的大小写。

对于len(thelist) == 1,它无限地分为两个长度为0和1的列表。

以下代码应该有效:

代码语言:javascript
复制
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]))
票数 2
EN

Stack Overflow用户

发布于 2022-05-05 14:25:18

基本大小写还可以检查是否“中间== 0”并终止递归调用。守则可能是;

代码语言:javascript
复制
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:])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72127666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档