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

时间:2017-01-29 18:24:56

标签: c tracing

我正在编写计算约瑟夫数的代码。我只是在尝试使用数字来获得正确的代码。这是我写的代码:

int answer(int n, int k) {
    if (n == 0) {
        return 0;
    } else {
        return (answer(n - 1, k) + k + 1) % n + 1;
    }
}

这是正确的(我总是保留k = 0),但现在我不知道为什么。

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

这就是我认为它的工作方式:

answer(2,0) => ((answer(1,0))+1)%3 => ((((answer(0,0))+1)%2)+1)%3 => ((1%2)+1)%3 => (1+1)%3 => 2

然而,答案是1

有人可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

  • 下去:

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

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

answer(0,0) =>返回0

  • 上去:

answer(1,0) =>返回(0+1)%1+ 1 which is 1

answer(2,0) =>返回(1+1)%2 + 1 which is 1