# 000131. Как делать функции c#- Часть 3

Как делать функции c#? Часть 3||wmysterio|wmysterio|<wmysterio@yandex.ru>|||Приветствую Вас, дорогие пользователи сайта. Это третья часть по разработке функций на c#. И её я решил посвятить рекурсии. Что это вообще такое? В  программировании это понятие называется вызов функции самой из себя в качестве вспомогательной функции. Классическими методами использования рекурсивных методов является вычисление факториала чисел. Я не буду выносить мозг Вам и себе с этими факториалами и приведу более лёгкий метод. Допустим мы подаём в функцию некое число. Нам нужно вычислить квадрат этого числа и вернуть этот результат. Причём нужно это делать таким образом, что бы квадрат нашего числа должен возносится в степень до тех пор, пока входящее число не больше указанного числа. Следовательно наша функция будет принимать 2 параметра:

| <p>public static int Qad(int FirstValue, int MaxValue) {<br>// .....<br>}<br></p> |
| --------------------------------------------------------------------------------- |

Первым делом нужно написать условие, чтобы число FirstValue было больше за второй параметр , так же не был равен нулю или единице. Если одно из этих условий выполнятся, то возвращаем параметр FirstValue:<br>

\| <p>public static int Qad(int FirstValue, int MaxValue)  {<br>    if (FirstValue > MaxValue || FirstValue == 0 || FirstValue == 1) {<br>        return FirstValue;<br>    }<br>}<br></p> |
\| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Эти условия мы задали, что бы сделать как бы границу вычисления. Так как рекурсия - это цикличное действие, то условия выхода должны быть. Теперь в дело мы и пустим рекурсию. Так как мы поставили цель задания вычислять квадрат числа, то нужно умножить число на FirstValue и подставить его у вновь вызванную функцию Qad. Теперь наш код будет иметь вид:

\| <p>public static int Qad(int FirstValue, int MaxValue)  {<br>    if (FirstValue > MaxValue || FirstValue == 0 || FirstValue == 1) {<br>        return FirstValue;<br>    } else {<br>        FirstValue <em>= FirstValue;</em><br>        <em>return Qad(FirstValue, MaxValue);</em><br>    <em>}</em><br><em>}</em><br></p> |
\| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Теперь напишем код основной программы и подставим входные данные:

\| <p>using System;<br><br>namespace Consol {<br>    class Program {<br>        static void Main() {<br>            int start = Qad(7, 200);<br>            Console.WriteLine("{0}", start);<br>            Console.ReadKey();<br>        }<br><br>        public static int Qad(int FirstValue, int MaxValue)  {<br>            if (FirstValue > MaxValue || FirstValue == 0 || FirstValue == 1) {<br>                return FirstValue;<br>            } else {<br>                FirstValue <em>= FirstValue;</em><br>                <em>return Qad(FirstValue, MaxValue);</em><br>            <em>}</em><br>        <em>}</em><br>    <em>}</em><br><em>}</em><br></p> |
\| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |

Результат выполнения программы:\
![](https://github.com/wmysterio/scm-scripting-lessons/blob/main/_pu/1/01804118.png)\
Как же мы получили такой результат? Смотрим арифметические операции над FirstValue:

| <p>Итерация функции<br></p> | FirstValue                                                                                               |
| --------------------------- | -------------------------------------------------------------------------------------------------------- |
| <p>0<br>1<br>2<br></p>      | <p>MaxValue > 7 => 77 = 49<br>MaxValue > 49 => 4949 = 2401<br>MaxValue > 2401 => 2401 => return;<br></p> |

Достаточно сложно объяснить словами сам процесс рекурсии - это нужно понять на практике. Саму рекурсию используют не так часто, но всё же применение всегда находится. Недостатком повторного вызова - нужно слишком вдумчиво продумывать алгоритм выполнения, так как не рекомендуется выполнять длительные и сложные действия в самой функции и не создавать всякого рода переменные в теле функции, так как это влияет на быстродействие программы и на производительности в целом. К тому-же нужно максимально обезопасить программу от зацикливания.\
\
Я привёл один из лёгких способов функции это типа. Надеюсь вам было понятно и полезно.|724|1|0|01804118`png`141\`71||kak\_delat\_funkcii\_c\_chast\_3|1392798688


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lessons.sannybuilder.com/00300/00100/000131.-kak-delat-funkcii-c-chast-3.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
