2017-01-29 19 views
0

Я писал код, который вычисляет число Джозефуса. Я просто экспериментировал с цифрами, чтобы получить код в порядке. Это код, который я написал:Как этот код 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

yep совершенно правильно. Пожалуйста ! –