约瑟夫环(递归)

约瑟夫环

 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\n",i,fun(10,3,i));         //依次输出每次淘汰是的数
26 
27     return 0;
28 
29 }

 

posted on 2016-03-25 17:45  走-走  阅读(240)  评论(0编辑  收藏  举报