2017-01-29 2 views
0

Ich schrieb Code, der die Josephus-Nummer berechnet. Ich habe gerade mit den Zahlen experimentiert, um den Code richtig zu machen. Dies ist der Code, den ich schrieb:Wie funktioniert dieser C-Code zum Finden der Josephus-Nummer?

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

Dieses korrekt ist (Ich halte k = 0 immer), aber jetzt weiß ich nicht, warum.

Ich habe versucht, es manuell zu verfolgen, aber nicht die gleiche Antwort erhalten. Diese

ist, wie ich denke, es funktioniert:

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

Die Antwort ist jedoch 1.

Kann mir bitte jemand erklären?

Antwort

2
  • Nach unten:

answer(2,0) => Rückkehr ((answer(1,0))+1)%2 + 1

answer(1,0) => Rückkehr ((answer(0,0))+1)%1+ 1

answer(0,0) => Rückkehr 0

  • Sprung nach oben:

answer(1,0) => Rückkehr (0+1)%1+ 1 which is 1

answer(2,0) => Rückkehr (1+1)%2 + 1 which is 1

+0

Sein 1, weil 1% 1 = 0. ich es jetzt verstehen. Vielen Dank!! : D – San

+0

yep total richtig. Bitte ! –