# 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
