Как работает программа расчета факториала java?
Разбираю программу которая считает факториал и не понимаю как она работает.
Я это понимаю так, что result = (5-1)*5 = 20, то есть у меня результат 20.
Как программа выходит на результат 120? Объясните пожалуйста популярно, пошагово...
class Recursia2 {
int factR(int n) {
int result;
if (n == 1) return 1;
else result = factR(n - 1) * n;
return result;
}
}
class Recursion2 {
public static void main(String args[]) {
Recursia2 f = new Recursia2();
System.out.println("Факториал 5 равен " + f.factR(5));
}
}
Ответы (2 шт):
Факториа́л — функция, определённая на множестве неотрицательных целых чисел. Название происходит от лат. factorialis — действующий, производящий, умножающий; обозначается n!, произносится эн факториа́л. Факториал натурального числа n определяется как произведение всех натуральных чисел от 1 до n включительно.
Т.е. факториал 5! = 1 * 2 * 3 * 4 * 5 = 120
Что происходит в Вашем коде?
Функция factR вызывает себя же, только с n - 1, пока не дойдет до 1.
Уменьшение n:
else result = factR(n - 1) * n;
Условие выхода из рекурсии:
if (n == 1) return 1;
Таким образом, число n уменьшается до тех пор, пока не будет соблюдено условие выхода из рекурсии(число n не станет единицей).
Получается, что при каждом шаге функция умножает свой n на n "своего ребенка", что нас и приводит к формуле факториала:
n! = n * n - 1 * ... * 2 * 1.
Неправильно понимаете. Не result = (5-1)*5 , а result = factR(5-1)*5.
Потом следует result = factR(5-1-1)*(5-1)*5 и т.д. пока не дойдёт до factR(1), после чего результат вычислится (1*(5-1-1-1)*(5-1-1)*(5-1)*5) и будет выдан.