Bootstrap

约瑟夫环(递归实现)理解过程

推理过程

 这里假设我们希望永远都是0位置先报数,这个假定逻辑很重要。

按照这个假定逻辑,我们会对整个环形链表逆时针旋转m个位置,也就是3个单位,位置3移动到了0位置。

这样就把10人游戏的第二轮,转换成了9人游戏的第一轮。

推理:假如知道了9人游戏中谁会留在最后,是不是就可以推导出10人游戏谁可以留到最后

这时会有一个想法:

旧位置3 是否是 新位置0 加3 得到的?

但是,因为是环状结构,旧位置 的1 通过新位置8 加3 的方式是不能直接得出来的

观察一下加3的处理结果:

新位置8 加3 的方式8 + 3 == 11,旧位置是1,

新位置7 加3 的方式7 + 3 == 10,旧位置是0,

基于以上思考过程,得出推理公式:((新位置)+ 3)% 10 == 旧位置

通用公式((新位置)+ m)% n == 旧位置

递推公式

如果f(n,m)是 当总数为n,报数为m的最后存活位置

如果f(n-1,m)是 当总数为n-1,报数为m的最后存活位置

参考:https://v.qq.com/x/page/e0965vbfeg4.html​​​​​​​

;