HTML Diff
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