公式(我试过了,肯定对,以后约瑟夫就不怕了) F(1)=1 F(m)=(F(m-1)+n-1)mod m + 1 m个人,数到n就出列,求最后一人 用递归作好了约瑟夫公式: 令f(1)=0,那么f(n)=(f(n-1)+m)%n。 由于最终计算出的f(n)是从0开始的,f(n)再加1即为最后一人员对应的数字。 以java代码为例,代码如下: public class Test public static void main(String[] args) int n = 5, m = 3; if (n < 1 || m < 1) System.out.println("parameters error!"); return; } System.out.println(runYSFCycle(n, m)+1); } //参数n为中人数,人数排列为1、2、3、……n; //参数m为模,即每隔m个人退出圈子 static int runYSFCycle(int n, int m) if (n == 1) return 0; } return (runYSFCycle(n - 1, m) + m) % n; } }经典约瑟夫环问题:// n个人(1..n)围成一圈,从m开始报数,增量为k// 返回最后一个人的编号,o(n)复杂度;int josephus(int n,int k,int m) int s = 0; for(int i = 2; i <= n; i ++) s = (s+k)%i; k %= n; if(!k) k = n; int d = (s+1)+(m-k); d=(n+d)%n; return d ? d : n;}去网上搜索约瑟夫问题,这个是一个参数等于3的情形。