代码
// 有n个人的时候,存活的人所在的下标
public int f(int n, int m) {
// 最后一轮,只剩下1个人的时候,最后留下的序号当然是在下标0(n%1永远为0)
if(n == 1) return 0;
// 本轮删除的第m个人位置 (m%n) + 下一轮只剩下n-1个人时存活的人所在的下标f(n - 1,m))
// return (m % n + f(n - 1,m)) % n;
return (m + f(n - 1,m)) % n;
}
另一个全程解答图
最后活下来的元素全历程⬆️
倒推解答
f(n,m) 是那个活着人的在每轮报数后的下标,最后活着的人的下标是0,因为只剩下他一个人了
倒推有: