python - 约瑟夫斯算法在Python中返回None的递归函数
问题描述
我正在编写约瑟夫斯算法。
约瑟夫斯问题是一个数学问题,其中有一个圆,它的圆周由 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))
问题是它正在返回 me None
,但是当我打印L[0]
而不是返回它时,我有这个列表[2,0]
,这是一个很好的结果,所以我的算法有效。但它只是调用return
的第一个函数的值loopInList
(将新列表作为参数的那个),并且对于这个新列表,我不会进入else
语句,所以它返回 None。我希望我的第一个函数调用返回在递归循环中调用的最后一个函数中返回的值。
解决方案
您是否打算这样做(只是在递归块中添加了 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))
推荐阅读
- python - 我如何使用循环来创建字段列表
- android - 重置 GDPR/同意对话框(撤销同意后选择重新加入)
- python - Python Pandas Dataframe:每个人最近第二天的值
- javascript - 如何检查道具中的元素是否匹配条件?
- python - 使用scrapy下载内容并保存到列表中
- latex - Doxygen LaTeX 输出段落缩进
- symfony - 我在部署到生产后清除了缓存,但也丢失了我的应用程序缓存。如何在看到新的 symfony 代码更新时排除我的池?
- php - 可以使用 PHP 睡眠功能来减轻 bot 流量吗?
- java - Hibernate & Spring - org.hibernate.PropertyAccessException:无法通过反射设置字段值 [1] 值
- javascript - 从字符串中分离整数和小数