约瑟夫环(Josephus problem)

问题描述

这个问题说的是一个小故事。在很久以前,有n个犹太人遭到敌人的追击,他们逃到了一个山洞中,大部分的人决定宁愿去死也不要让敌人抓住。他们围成一圈,一个个轮流报数,报到k的人就要当场自杀,然后下一个人从1开始重新数数。而约瑟夫不想自杀,于是他灵机一动,站到了圈的一个位置上,结果其他人一个个都自杀了,最后只剩下约瑟夫一个人还活着,最终他逃出了山洞。那么问题来了,约瑟夫站的是哪个位置呢?

数学公式

递推公式:f ( N , M ) = ( f ( N − 1 , M ) + M ) % N

  • f ( N , M ) 表示,N个人报数,每报到M时杀掉那个人,最终胜利者的编号
  • f ( N − 1 , M )表示,N-1个人报数,每报到M时杀掉那个人,最终胜利者的编号