约瑟夫环的递推方法

Posted SJY

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了约瑟夫环的递推方法相关的知识,希望对你有一定的参考价值。

可以这样理解这个方法:
当有n个人的时候,他们的编号依次是0、1、2、3、4、………、n-1。假设最后编号为x(n)的人会留下来。
因为数到m的那个人会出列,那么此轮中编号为(m-1)%n的人会出列,编号为(m+0)%n的人将做为下一轮编号为0的人,此轮编号为(m+i)%n的人将做为下一轮编号为i的人…
因此当有n-1个人的时候,编号为i的人对应着上一轮编号为(m+i)%n的人。假设此轮编号为x(n-1)的人最终会留下来。因为编号为x(n-1)的人肯定对应着上一轮的x(n),所以有x(n)=(m+x(n-1))%n
有了这个递推公式,那我们就可以一直递推到x(2)=(m+x(1))%2,而x(1)=0。
所以我们可以这么来写这个函数:
j = 0
for i 从 2 到 n:
j = (m+j)%i
最终第j个人会留下来(如果从1开始编号就是第j+1个人最终会留下来)。

链接:https://www.zhihu.com/question/20065611/answer/78681758
来源:知乎

以上是关于约瑟夫环的递推方法的主要内容,如果未能解决你的问题,请参考以下文章

约瑟夫环的java解决

Josephus环的四种解法(约瑟夫环)

用循环链表解决约瑟夫环的问题

小朋友学数据结构:约瑟夫环的链表解法数组解法和数学公式解法

约瑟夫环的三种解法

约瑟夫环的三种解法