Рекурсивная функция - это функция, которая вызывает себя до тех пор, пока не достигнет оператора return, который не позволяет ему напомнить себя. Возьмем ваш пример, функцию Factorial. Factorial - математическая функция, которая возвращает число, помноженное на себя - 1, умноженное на себя - 2, ... умноженное на 1, например: factorial of 5 = 5! = 5x4x3x2x1 = 120. он также равен самому себе, умноженному на факториал самого себя -1, который равен: 5! = 5x4! Примите во внимание, что 0! = 1. , чтобы представить это в Java-коде, вам нужен цикл, который умножает числа, начинающиеся с 1, и до тех пор, пока вы не вычислите его факториал. Далее, объясняя ваш код, вычислим Factorial (5): Factorial() возвращает целое число.
Первоначальный вызов из main(): 5! = 0, затем пропустите условие (n == 0); t = Факториал (5-1) = Факториал (4);
Второй вызов факториала (4): 4! = 0, затем пропустите условие (n == 0); t = Факториал (4-1) = Факториал (3);
Третий вызов от Factorial (3): 3! = 0, затем пропустите условие (n == 0); t = Факториал (3-1) = Факториальный (2);
Четвертый звонок от Factorial (2): 2!= 0, затем пропустите условие (n == 0); t = Факториал (2-1) = Факториальный (1);
Пятый звонок от Factorial (1): 1! = 0, затем пропустите условие (n == 0); t = Factorial (1-1) = Factorial (0);
Шестой вызов Factorial (0): 0 == 0, затем возвращаемое значение 1;
Первый возврат, 1, на пятый вызов (факториал (1)): return n * t = return 1 * 1 = возвращаемое значение 1;
Второй возврат, 1, четвертый вызов (факториал (2)): return n * t = возврат 2 * 1 = возвращаемое значение 2;
Третий возврат, 2, третий вызов (факториал (3)): return n * t = возврат 3 * 2 = возвращаемое значение 6;
Второй возврат, 6, второй вызов (факториал (4)): return n * t = возврат 4 * 6 = возвращаемое значение 24;
Второй возврат, 24, Первый вызов (факториал (5)): return n * t = возврат 5 * 24 = возвращаемое значение 120;
Второй возврат, 120, Начальный вызов (из main()): print (120);
Надеюсь, это поможет вам понять рекурсию.
См. Http://stackoverflow.com/questions/26041546/ – Alnitak
Рекурсия - вызов функции, который (в конечном итоге) вызывает себя снова. winding = вызывает себя снова, unwinding = возврат из предыдущего рекурсивного вызова. –
Отлаживайте эту программу в среде IDE, такой как Eclipse, и вы можете подробно следить за потоком. – Magnilex