Рекурсивная функция факториала в C#
Как известно, рекурсивная функция представляет собой конструкцию, при которой эта функция вызывает саму себя. Давайте рассмотрим, как это выглядит на практике с факториалом.
Для примера возьмем вычисление факториала по формуле
Итак, сначала определяем метод для нахождения факториала:
Важно отметить, что во время создания рекурсивной функции в ней обязательно должен находиться какой-либо базовый вариант -- с него и начинается вычисление функции.
В случае с нахождением факториала, речь идет о факториале числа 1, который, соответственно, равняется 1. При этом факториалы остальных положительных чисел будут начинаться с вычисления факториала единицы, который равняется 1.
В C# для возвращения базового варианта используют оператор return:
Таким образом, когда вводимое число равняется 1, возвращается 1.
Но у рекурсивных функций есть и другая особенность: все рекурсивные вызовы должны непосредственно обращаться к подфункциям, а эти подфункции в итоге сходятся к базовому варианту:
В процессе передачи в функцию числа, неравного 1, при последующих рекурсивных вызовах подфункций в них каждый раз будет передаваться число, которое меньше на единицу. В итоге наступит ситуация, когда число станет равняться единице, и будет задействован базовый вариант. Это есть не что иное, как рекурсивный спуск.
Ну что же, воспользуемся этой функцией:
А теперь давайте поэтапно рассмотрим, что произойдет при вызове
1.Первое -- это проверка, равняется ли число единице:
Так как в начале n равняется 4, это условие является ложным, следовательно, происходит выполнение кода.
То есть по факту мы имеем следующее:
2.Теперь происходит выполнение следующего выражения:
3.Ну а потом выполняется следующее выражение:
4.Далее подходит очередь вот этому выражению:
И вот теперь n у нас будет равняться 1, а значит, выполнится код.
И возвратится 1.
По результату всего процесса выражение
По материалам https://metanit.com/sharp/tutorial/.