【发布时间】: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>2是L>1? -
是的,你是对的,我的错。无论如何仍然有我的无问题:/(顺便说一句)