Рекурсивная функция факториала в C#

Как известно, рекурсивная функция представляет собой конструкцию, при которой эта функция вызывает саму себя. Давайте рассмотрим, как это выглядит на практике с факториалом.

Для примера возьмем вычисление факториала по формуле n! = 1 * 2 * … * n. В нашем случае для нахождения числового факториала мы просто перемножаем все значения до этого числа. К примеру, факториал числа 4 равняется 24 = 1 * 2 * 3 * 4, тогда как факториал числа 5 равняется 120 = 1 * 2 * 3 * 4 * 5.

Итак, сначала определяем метод для нахождения факториала:

Важно отметить, что во время создания рекурсивной функции в ней обязательно должен находиться какой-либо базовый вариант -- с него и начинается вычисление функции.

В случае с нахождением факториала, речь идет о факториале числа 1, который, соответственно, равняется 1. При этом факториалы остальных положительных чисел будут начинаться с вычисления факториала единицы, который равняется 1.

В C# для возвращения базового варианта используют оператор return:

Таким образом, когда вводимое число равняется 1, возвращается 1.

Но у рекурсивных функций есть и другая особенность: все рекурсивные вызовы должны непосредственно обращаться к подфункциям, а эти подфункции в итоге сходятся к базовому варианту:

В процессе передачи в функцию числа, неравного 1, при последующих рекурсивных вызовах подфункций в них каждый раз будет передаваться число, которое меньше на единицу. В итоге наступит ситуация, когда число станет равняться единице, и будет задействован базовый вариант. Это есть не что иное, как рекурсивный спуск.

Ну что же, воспользуемся этой функцией:

А теперь давайте поэтапно рассмотрим, что произойдет при вызове Factorial(4).

1.Первое -- это проверка, равняется ли число единице:

Так как в начале n равняется 4, это условие является ложным, следовательно, происходит выполнение кода.

То есть по факту мы имеем следующее:

2.Теперь происходит выполнение следующего выражения:

3.Ну а потом выполняется следующее выражение:

4.Далее подходит очередь вот этому выражению:

И вот теперь n у нас будет равняться 1, а значит, выполнится код.

И возвратится 1.

По результату всего процесса выражение Factorial(4) реально выльется в следующее:

По материалам https://metanit.com/sharp/tutorial/.