这个查找约瑟夫数的C代码是如何工作的?

这个查找约瑟夫数的C代码是如何工作的?,c,trace,C,Trace,我在写计算约瑟夫数的代码。我只是在用数字做实验,以得到正确的代码。这是我写的代码: int answer(int n, int k) { if (n == 0) { return 0; } else { return (answer(n - 1, k) + k + 1) % n + 1; } } 这是正确的(我总是保持k=0),但现在我不知道为什么 我尝试手动跟踪它,但没有得到相同的答案 我认为它是这样工作的: 答案(2,0)=>((答案

我在写计算约瑟夫数的代码。我只是在用数字做实验,以得到正确的代码。这是我写的代码:

int answer(int n, int k) {
    if (n == 0) {
        return 0;
    } else {
        return (answer(n - 1, k) + k + 1) % n + 1;
    }
}
这是正确的(我总是保持
k=0
),但现在我不知道为什么

我尝试手动跟踪它,但没有得到相同的答案

我认为它是这样工作的:

答案(2,0)
=>
((答案(1,0))+1)%3
(((答案(0,0))+1)%2)+1)%3
=>
((1%2)+1)%3
(1+1)%3
2

但是,答案是
1

有人能解释一下吗?

  • 下:
answer(2,0)
=>返回
((answer(1,0))+1)%2+1

回答(1,0)
=>返回
((回答(0,0))+1)%1+1

回答(0,0)
=>返回
0

  • 上升:
回答(1,0)
=>返回
(0+1)%1+1,即1

回答(2,0)
=>返回
(1+1)%2+1,即1

  • 下:
answer(2,0)
=>返回
((answer(1,0))+1)%2+1

回答(1,0)
=>返回
((回答(0,0))+1)%1+1

回答(0,0)
=>返回
0

  • 上升:
回答(1,0)
=>返回
(0+1)%1+1,即1


回答(2,0)
=>返回
(1+1)%2+1,它是1

它的1,因为1%1=0。我现在明白了。谢谢!!:DIts 1,因为1%1=0。我现在明白了。谢谢!!:D