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

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

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

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

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

1-1801-e4ec94.png

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

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

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

2-1801-39b4ef.png

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

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

3-1801-8f9b3d.png

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

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

4-1801-a6ed94.png

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

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

5-1801-db05b3.png

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

6-1801-d66d83.png

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

7-1801-7c9df0.png

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

8-1801-fcf316.png

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

9-1801-3b82f8.png

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

10-1801-8b3fe5.png

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

11-1801-1c39ab.png

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

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

13-1801-728bd5.png

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

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто