首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >到底是什么返回递归函数?

到底是什么返回递归函数?
EN

Stack Overflow用户
提问于 2021-04-16 17:05:56
回答 1查看 43关注 0票数 2

我正在试着在一个数字列表中找到第二大数字。在有重复的情况下,第二个最大的数字将是按值计算的第二大数字。例如,在列表3、2、7、7、5中,第二大数字应该是5。

所以这就是我为了解决这个问题所做的。

代码语言:javascript
复制
def find_second_number(nums):
    m1 = sorted(nums)[-1]
    m2 = sorted(nums)[-2]
    if m1 == m2:
        find_second_number(sorted(nums)[:-1])
    else:
        return m2
    return m2

arr = [x for x in (input().split())] 
    
print(find_second_number(arr))

我不明白的是,返回的是哪个m2。我猜当arr = 3,2,7,7,5时,会有两次find_second_number()的递归调用,然而,我搞不懂哪个函数实例应该返回m2。

EN

回答 1

Stack Overflow用户

发布于 2021-04-16 18:03:30

我不明白的是,返回的是哪个m2。

它始终是第一次调用find_second_number时执行上下文的m2。无论find_second_number的递归调用返回什么,...您的代码会忽略它。

因此,要修复它,请执行以下操作:

代码语言:javascript
复制
if m1 == m2:
    return find_second_number(sorted(nums)[:-1])
else:
    return m2

但是,您的代码会多次调用sorted。这使得它的效率非常低。即使只调用一次它也会给你的算法带来O(log)的时间复杂度,而它可以用线性时间复杂度来完成。

例如,可以这样做:

代码语言:javascript
复制
def find_second_number(nums):
    greatest = max(nums)
    return max(m for m in nums if m < greatest)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67122306

复制
相关文章

相似问题

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