首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用递归在序列中查找最大项

使用递归在序列中查找最大项
EN

Stack Overflow用户
提问于 2016-03-09 13:53:26
回答 2查看 840关注 0票数 0

我试图使用递归获得一个函数来查找序列中的最大项,但是我一直得到一个错误,比如当我尝试max (range(100))时:

代码语言:javascript
运行
复制
TypeError: unorderable types: int() > list()

我是一个编程新手,所以任何帮助都是非常感谢的。

代码语言:javascript
运行
复制
def Max(s)
    if len(s) == 1:
        return s[0]
    else:
        m = Max(s[1:])
        if m > s:
            return m
        else:
            return s[0]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-09 14:00:44

你似乎忘了把这个指数:

代码语言:javascript
运行
复制
def Max(s):
    if len(s) == 1:
        return s[0]
    else:
        m = Max(s[1:])
        if m > s[0]: #put index 0 here
            return m
        else:
            return s[0]

m是一个单数,因此不能与s (即list )进行比较。这样你就犯了错误。

附带注意,请考虑使用三元操作[true_val if true_cond else false_val]来简化符号。另外,您不需要最后一个else块,因为您的if子句在离开该块之前有明确的return

代码语言:javascript
运行
复制
def Max(s):
    if len(s) == 1:
        return s[0]
    m = Max(s[1:])
    return m if m > s[0] else s[0] #put index 0 here

那么您的代码就会变得简单得多。

票数 5
EN

Stack Overflow用户

发布于 2016-03-09 15:15:14

该变体将在每个递归级别将问题分割成两半,并对两部分进行递归解决,从而减少堆栈大小。这允许您评估具有数千个元素的列表,在这些元素中,将问题大小减少一个的方法会导致堆栈溢出。

代码语言:javascript
运行
复制
def Max(lst):
    l = len(lst)
    if l > 1:
        mid = l / 2
        m1 = Max(lst[:mid])     # find max of first half of the list
        m2 = Max(lst[mid:])     # find max of second half of the list
        # max of the list is the larger of these two values
        return m1 if m1 > m2 else m2
    return lst[0]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35893550

复制
相关文章

相似问题

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