c - 这个用于查找 Josephus 数的 C 代码如何工作?

标签 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),但现在我不知道为什么。

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

我认为它是这样工作的:

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

然而,答案是1

有人可以解释一下吗?

最佳答案

  • 往下走:

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 即 1

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

关于c - 这个用于查找 Josephus 数的 C 代码如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41924385/

相关文章:

c - 为什么我会遇到段错误?当所有函数都在 main 中时,它就可以工作

c - 有没有C的子集可以这样写: i=+1?

c - 如何从 C 文本文件中读取数字 block

c# - 通过 app.config 关闭跟踪

Python对象生命周期追踪

c - 在不知道要输入的字符串大小的情况下动态分配内存

c++ - 以随机顺序接收行时压缩位矩阵

c# - 加载跟踪监听器属性

java - 序列化/反序列化 MQMessage

debugging - 你能追踪这个 Haskell foldl lambda 函数是如何工作的吗?