Я создал два рекурсивных методов для расчета факториала следующим образом:Понимание поведения Java в рекурсивном факториала
private int fact1(int n) {
if (n == 0 || n == 1)
return 1;
return n * fact1(--n);
}
private int fact2(int n) {
if (n == 0 || n == 1)
return 1;
return fact2(--n) * n;
}
Когда я звоню fact1(4)
возвращает 24
. Когда я звоню fact2(4)
, он возвращает 6
(EDIT: не возвращается 18
, но 6
). Я знаю, что второй метод делает 3 * 2 * 1, но я не понимаю, почему не 4 * 3 * 2 * 1.
То же самое происходит, если я меняю возвращение к
//fact3(4) returns 60.
return (n + 1) * fact3(--n); // wrong
//fact4(4) returns 24
return fact4(--n) * (n + 1); // works
Почему это метод, демонстрирующий такое поведение?
Вопрос о поведении. Я знаю, что n * fact(n-1)
- лучший способ решить эту проблему.
Может кто-нибудь помочь мне понять оценку этого выражения? Благодаря!
Странно, как никто еще не указал, что 'fact2 (4)' на самом деле '6'. –