关于C语言经典递归算法的问题:(必须用递归算法来做)请见题目补充问题。
# include & ltstdio.h & gt
int jos(int n,int k);// n表示总共有多少人* * *,k表示哪个数字退出。
int main(void)
{
int n,k,s;
Printf("请输入总人数和间隔数(用空格分隔)\ n ");
scanf("%d %d ",& ampn & amp;k);
s = jos(n,k);
Printf ("Winner: %d\n ",s);
返回0;
}
int jos(int n,int k)
{//每次运行都会返回到当前消除的位置。
int x;
if(n = = 1)//剩下最后一个的时候他就是赢家。
x = 1;
其他
{//如果不止一个
x=(jos(n-1,k)+k)% n;//继续从剩下的这些人中选择获胜(%n达到了循环的目的)(这里是使用n-1时的淘汰位置加上K是下一个淘汰位置,此时N再次减少)
如果(x==0)
x = n;
}
返回x;
}
/*
请输入总人数和间隔数(用空格分隔)
37 5
赢家是:1
按任意键继续
*/