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

推理过程

 这里假设我们希望永远都是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​​​​​​​

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值