约瑟夫环
1 #include <cstdio> 2 3 using namespace std; 4 5 int fun(int m,int k,int i) //m表示当前环内的总数,k表示k个数之后淘汰,i表示淘汰次数。 6 7 { 8 9 if(i==1) //第一次出环的数 10 11 return (m+k-1)%m; 12 13 else //不是第一次出环的,先向上递归到第一次,再依次返回。因为每一次淘汰后,要从淘汰后一位开始。 14 15 return (fun(m-1,k,i-1)+k)%m; 16 17 } 18 19 int main() 20 21 { 22 23 for(int i=1;i<=10;i++) 24 25 printf("第%2d次出环:%2d ",i,fun(10,3,i)); //依次输出每次淘汰是的数 26 27 return 0; 28 29 }