Я писал код, который вычисляет число Джозефуса. Я просто экспериментировал с цифрами, чтобы получить код в порядке. Это код, который я написал:Как этот код 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
.
Может кто-нибудь объяснить это?
Его 1, потому что 1% 1 = 0. Я понимаю это сейчас. Благодаря!! : D – San
yep совершенно правильно. Пожалуйста ! –