2017-01-29 21 views
0

我正在編寫計算Josephus數的代碼。我只是試着用數字來獲得正確的代碼。這是我寫的代碼:這個用於查找Josephus數字的C代碼是如何工作的?

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

有人能解釋一下嗎?

回答

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

+0

其1,因爲1%1 = 0。我現在明白了吧。謝謝!! :D – San

+0

是完全正確的。別客氣 ! –

相關問題