2017-01-29 10 views
0

私はジョセフスの数を計算するコードを書いていました。コードを正しく取得するために数字を試していただけです。これは私が書いたコードです:これは正しいです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

まったく正しい。どういたしまして ! –

関連する問題