【问题标题】:Recursive function returning None in Python for josephus algorithm [duplicate]约瑟夫斯算法在Python中返回None的递归函数[重复]
【发布时间】:2021-03-28 09:14:38
【问题描述】:

我正在编写约瑟夫斯算法。

约瑟夫斯问题是一个数学问题,其中有一个圆,它的圆周由 n 个人组成。 从第 0 位的人开始,每个人淘汰他们左边的人(圆圈中的下一个人)。然后下一个活着的人做同样的事情,重复这个过程,直到只剩下一个人活着。

我使用了这样的递归函数:

def loopInList(L):
    if len(L)>1:
        i=0
        while i < len(L) - 1 :
            L.remove(L[i+1])
            i += 1 
        loopInList(L[i:] + L[:i])
    else:
        return L[0]
        
def josephus(n):
    L = [x for x in range(n)]
    return loopInList(L)
print(josephus(9))

问题是它返回我None,但是当我打印L[0] 而不是返回它时,我有这个列表[2,0],这是一个很好的结果,所以我的算法有效。但它只有return 调用了第一个函数loopInList 的值(获取新列表作为参数的那个),并且有了这个新列表,我不会进入else 语句,所以它返回None。我希望调用的第一个函数返回递归循环中调用的最后一个函数中返回的值。

【问题讨论】:

  • 应该L&gt;2L&gt;1
  • 是的,你是对的,我的错。无论如何仍然有我的无问题:/(顺便说一句)

标签: python recursion


【解决方案1】:

你是否打算这样做(只是在递归块中添加了 return 语句):

def loopInList(L):
    if len(L)>1:

        i=0
        while i < len(L) - 1 :
            L.remove(L[i+1])
            i += 1 
        return loopInList(L[i:] + L[:i])
    else:
        return L[0]
        
def josephus(n):
    L = [x for x in range(n)]
    return loopInList(L)
print(josephus(9))

【讨论】:

  • 就是这样,一个简单的指令错过了:(我发现递归抱歉^^
  • 我们都做到了。由于此问题已关闭,您可能无法将其标记为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-25
  • 2021-12-23
相关资源
最近更新 更多