关于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

按任意键继续

*/