0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: с#, рекурсивная функция, факториал</p>
1
<p>Теги: с#, рекурсивная функция, факториал</p>
2
<p>Как известно, рекурсивная функция представляет собой конструкцию, при которой эта функция вызывает саму себя. Давайте рассмотрим, как это выглядит на практике с факториалом.</p>
2
<p>Как известно, рекурсивная функция представляет собой конструкцию, при которой эта функция вызывает саму себя. Давайте рассмотрим, как это выглядит на практике с факториалом.</p>
3
<p>Для примера возьмем вычисление факториала по формуле n! = 1 * 2 * … * n. В нашем случае для нахождения числового факториала мы просто перемножаем все значения до этого числа. К примеру, факториал числа 4 равняется 24 = 1 * 2 * 3 * 4, тогда как факториал числа 5 равняется 120 = 1 * 2 * 3 * 4 * 5.</p>
3
<p>Для примера возьмем вычисление факториала по формуле n! = 1 * 2 * … * n. В нашем случае для нахождения числового факториала мы просто перемножаем все значения до этого числа. К примеру, факториал числа 4 равняется 24 = 1 * 2 * 3 * 4, тогда как факториал числа 5 равняется 120 = 1 * 2 * 3 * 4 * 5.</p>
4
<p>Итак, сначала определяем метод для нахождения факториала:</p>
4
<p>Итак, сначала определяем метод для нахождения факториала:</p>
5
<p>Важно отметить, что во время создания рекурсивной функции в ней обязательно должен находиться какой-либо базовый вариант -- с него и начинается вычисление функции.</p>
5
<p>Важно отметить, что во время создания рекурсивной функции в ней обязательно должен находиться какой-либо базовый вариант -- с него и начинается вычисление функции.</p>
6
<p>В случае с нахождением факториала, речь идет о факториале числа 1, который, соответственно, равняется 1. При этом факториалы остальных положительных чисел будут начинаться с вычисления факториала единицы, который равняется 1.</p>
6
<p>В случае с нахождением факториала, речь идет о факториале числа 1, который, соответственно, равняется 1. При этом факториалы остальных положительных чисел будут начинаться с вычисления факториала единицы, который равняется 1.</p>
7
<p>В C# для возвращения базового варианта используют оператор<strong>return</strong>:</p>
7
<p>В C# для возвращения базового варианта используют оператор<strong>return</strong>:</p>
8
<p>Таким образом, когда вводимое число равняется 1, возвращается 1.</p>
8
<p>Таким образом, когда вводимое число равняется 1, возвращается 1.</p>
9
<p>Но у рекурсивных функций есть и другая особенность: все рекурсивные вызовы должны непосредственно обращаться к подфункциям, а эти подфункции в итоге сходятся к базовому варианту:</p>
9
<p>Но у рекурсивных функций есть и другая особенность: все рекурсивные вызовы должны непосредственно обращаться к подфункциям, а эти подфункции в итоге сходятся к базовому варианту:</p>
10
<p>В процессе передачи в функцию числа, неравного 1, при последующих рекурсивных вызовах подфункций в них каждый раз будет передаваться число, которое меньше на единицу. В итоге наступит ситуация, когда число станет равняться единице, и будет задействован базовый вариант. Это есть не что иное, как<strong>рекурсивный спуск</strong>.</p>
10
<p>В процессе передачи в функцию числа, неравного 1, при последующих рекурсивных вызовах подфункций в них каждый раз будет передаваться число, которое меньше на единицу. В итоге наступит ситуация, когда число станет равняться единице, и будет задействован базовый вариант. Это есть не что иное, как<strong>рекурсивный спуск</strong>.</p>
11
<p>Ну что же, воспользуемся этой функцией:</p>
11
<p>Ну что же, воспользуемся этой функцией:</p>
12
<p>А теперь давайте поэтапно рассмотрим, что произойдет при вызове Factorial(4).</p>
12
<p>А теперь давайте поэтапно рассмотрим, что произойдет при вызове Factorial(4).</p>
13
<p>1.Первое -- это проверка, равняется ли число единице:</p>
13
<p>1.Первое -- это проверка, равняется ли число единице:</p>
14
<p>Так как в начале<em>n</em>равняется 4, это условие является ложным, следовательно, происходит выполнение кода.</p>
14
<p>Так как в начале<em>n</em>равняется 4, это условие является ложным, следовательно, происходит выполнение кода.</p>
15
<p>То есть по факту мы имеем следующее:</p>
15
<p>То есть по факту мы имеем следующее:</p>
16
<p>2.Теперь происходит выполнение следующего выражения:</p>
16
<p>2.Теперь происходит выполнение следующего выражения:</p>
17
<p>3.Ну а потом выполняется следующее выражение:</p>
17
<p>3.Ну а потом выполняется следующее выражение:</p>
18
<p>4.Далее подходит очередь вот этому выражению:</p>
18
<p>4.Далее подходит очередь вот этому выражению:</p>
19
<p>И вот теперь<em>n</em>у нас будет равняться 1, а значит, выполнится код.</p>
19
<p>И вот теперь<em>n</em>у нас будет равняться 1, а значит, выполнится код.</p>
20
<p>И возвратится 1.</p>
20
<p>И возвратится 1.</p>
21
<p>По результату всего процесса выражение Factorial(4) реально выльется в следующее:</p>
21
<p>По результату всего процесса выражение Factorial(4) реально выльется в следующее:</p>
22
<p><em>По материалам https://metanit.com/sharp/tutorial/.</em></p>
22
<p><em>По материалам https://metanit.com/sharp/tutorial/.</em></p>
23
23