这个查找约瑟夫数的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