问题形式:N个人围成一圈,从第一个开始报数,第K个将被杀掉,最后剩下一个,其余人都将被杀掉
基本公式:
用for循环
int josephus(int n,int k)
{
int res=0;
for(int i=1;i<=n;i++)res=(res+k)%i;
return res;
}
用递归
int jose(int n, int k)
{
if(n==0) return 0;
else return (jose(n - 1, k) + k) % n;
}
当然,当n=0时,jose自然等于0,易得n=1时,jose自然也等于1。
每一个n,都能与n-1产生联系,从而根据此写出代码。