返回原始值的递归方法

2024-06-11 05:32:07 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我正在尝试自己学习python,并在做编码难题。我遇到了一个几乎要求最佳位置排队赢得比赛的人。比赛负责人把站在奇数位置的人赶走。在

例如1,2,3,4,5

它可以去掉剩下2,4的奇数位置

将摆脱剩余的零头位置,留下4个作为赢家。在

当我调试代码时,代码似乎在工作,但它返回的是[1,2,3,4,5],而不是预期的[4]

这是我的代码:

def findWinner(contestants):
    if (len(contestants) != 1):
        remainingContestants = []
        for i, contestant in enumerate(contestants, 1):
            if (isEven(i)):
                remainingContestants.append(contestant)
        findWinner(remainingContestants)
    return contestants

我是不是没有看到逻辑错误,或者有什么我没有看到的东西?在


Tags: 代码编码lenifdef排队奇数负责人
3条回答

你应该用

return findWinner(remaingContestants)

否则,当然,你的列表永远不会更新,所以你的func总是返回contains

但是,请参阅PEP8 for style指南中的python代码:http://www.python.org/dev/peps/pep-0008/

函数可能是一个过度的杀戮…只要写下来

^{pr2}$

最后,不建议使用python中的递归;请使用类似

def find_winner(alist):
    while len(alist) > 1:
        to_get_rid = []
        for pos, obj in enumerate(alist, 1):
            if pos % 2:
                to_get_rid.append(obj)
        alist = [x for x in alist if not (x in to_get_rid)]
    return alist

这个怎么样:

def findWinner(contestants):
    return [contestants[2**int(math.log(len(contestants),2))-1]]

我不知道问题的实质是什么,但我不得不=p。我不能只看到所有的工作,以找到最大的权力2比选手少,而不指出。在

或者,如果您不喜欢“人工”解决方案并希望实际执行该过程:

^{pr2}$

必须将值从递归函数返回到调用函数:

return findWinner(remainingContestants)

否则,您将只返回原始值而不做任何更改。在

^{pr2}$

相关问题 更多 >