约瑟夫环的递归解决JAVA环境实验报告
/*
*约瑟夫环问题在java环境下的递归解决方法
*转载请申明出处,有问题可以发送至我的邮箱[email protected]
*2013.4.22
*nuist.edu.cn/
**/
publicclass Solve {
staticinth = 0;
//t_ten总长度,开始位置,报数距离
publicstaticvoid Yuesefu_solve(int t_len,int start, int s_len)//总长度,开始位置,距离长度
{
int[] a = newint[t_len];//整个
for(int i = 0 ;i
{
a[i] = i+1;
}
digui(a, t_len, start, s_len, 0);
}
publicstaticint digui(int[] args,int t_len,int start, int s_len,int baoshu_u)//所有数字的数组,总长度,开始位置,报数的长度,最后一个是递归用的衔接报数
{
int baoshu = baoshu_u;
for(int i = start-1; i
{
baoshu++;//报数
if(baoshu == s_len)
{
System.out.println("第" + args[i] + "个人出列"+(h++));//报到数的人移出数组,h表示输出的次序
baoshu = 0;
for(int j = i; j
{
args[j] = args[j+1];
}
i= i-1;
t_len--;
}
if(((i == t_len )&&(t_len != 1))||(i == t_len - 1 )&&(t_len !=
1))//如果到数组最后一个数,回头再来
{
start = 1;//将开始位置设为1
baoshu_u = baoshu;//将报数的状态传给下一个轮回
returndigui(args,t_len,start,s_len,baoshu_u);//递归 }
}
System.out.println(t_len);
for(int i = 0;i
{
System.out.println( args[i] );//输出剩余的数
}
return 0 ;
}
publicstaticvoid main(String args[])
{
Solve.Yuesefu_solve(10000,3,5);
}
}