Рекурсивная функция - это функция, которую вызывает сама по себе
Она позволяет программистам писать эффективные программы, используя минимальный объем кода .
Недостатком является то, что они могут вызывать бесконечные циклы и другие неожиданные результаты, если записано неправильно .
Для того, чтобы написать рекурсивную функцию.
Первое, что нужно рассмотреть, это когда вы решите выйти из цикла, который является циклом if
Второй процесс, который нужно выполнить, если мы являемся нашей собственной функцией
Из данного примера:
public static int fact(int n){
if(n <=1)
return 1;
else
return n * fact(n-1);
}
Из примера выше
if(n <=1)
return 1;
Является решающим фактором при выходе из цикла
else
return n * fact(n-1);
Является ли фактическая обработка, которая должна быть сделана
Позвольте мне разбить задачу по одному длялегкое понимание.
Давайте посмотрим, что произойдет внутри, если я запусту fact(4)
- Подставляя n = 4
public static int fact(4){
if(4 <=1)
return 1;
else
return 4 * fact(4-1);
}
*Сбой цикла 1053 *
If
переходит на цикл
else
с возвратом
4 * fact(3)
В стековой памяти у нас есть 4 * fact(3)
Подставляя n = 3
public static int fact(3){
if(3 <=1)
return 1;
else
return 3 * fact(3-1);
}
If
циклпроисходит сбой, поэтому он переходит к else
loop
, поэтому он возвращает 3 * fact(2)
Помните, что мы назвали `` `4 * fact (3)` `
Выход дляfact(3) = 3 * fact(2)
Пока в стеке 4 * fact(3) = 4 * 3 * fact(2)
В стековой памяти у нас есть 4 * 3 * fact(2)
Подставляя n = 2
public static int fact(2){
if(2 <=1)
return 1;
else
return 2 * fact(2-1);
}
If
циклпроисходит сбой, поэтому он переходит к else
loop
, поэтому он возвращает 2 * fact(1)
Помните, что мы вызвали 4 * 3 * fact(2)
Выход для fact(2) = 2 * fact(1)
Пока стек имеет 4 * 3 * fact(2) = 4 * 3 * 2 * fact(1)
В стековой памяти мы имеем 4 * 3 * 2 * fact(1)
Подставляя n = 1
public static int fact(1){
if(1 <=1)
return 1;
else
return 1 * fact(1-1);
}
If
циклtrue
, поэтому он возвращает 1
Помните, что мы назвали 4 * 3 * 2 * fact(1)
Вывод для fact(1) = 1
Пока стек имеет 4 * 3 * 2 * fact(1) = 4 * 3 * 2 * 1
Результат факт (4) = 4 * 3 * 2 * 1 = 24