Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Урок 8. Методы. Рекурсия.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
81.07 Кб
Скачать

1: Using System;

2:

3: // Рекурсия (простая рекурсия).

4:

5: // В теле метода Recursion на 19-й строке рекурсивно вызывается метод Recursion.

6: // Простая рекурсия - вызов методом самого себя (самовызов). При каждом вызове строится новая копия метода.

7:

8: Namespace Methods

9: {

10: Class Program

11: {

12: static void Recursion(int counter)

13: {

14: counter--;

15:

16: Console.WriteLine("Первая половина метода: {0}", counter);

17:

18: if (counter != 0)

19: Recursion(counter);

20:

21: Console.WriteLine("Вторая половина метода: {0}", counter);

22: }

23:

24: Static void Main()

25: {

26: Recursion(3);

27:

28: // Delay.

29: Console.ReadKey();

30: }

31: }

32: }

На 12 строке мы создаем метод с именем Recursion, которые принимает один целочисленный аргумент и в теле у нас организована какая-то логика. На 26 строке мы вызываем этот метод. Будем шагать? Конечно будем. Начинаем выполнение с метода Main, помните, точка входа в программу. Вызываем Recursion и передаем 3. Counter = 3. Это первый вызов, сейчас мы работаем с оригиналом. Если мы посмотрим. То мы находимся сейчас где? Вот здесь видите. Так 3. Уменьшаем counter на 1 и он равен 2. Далее, проверяем counter != 0. Конечно же нет. Вызываем себя. И во время вызова себя что у нас происходит? Построение вот этой второй копии. Видите, мы сейчас в копии находимся. Видите, курсор сейчас стоит вот здесь, на копии. Так, уменьшаем counter и он будет равен 1. Вот эти блоки проверки условия. Так, 1 != 0 = True. Создаем еще одну копию. Смотрите, мы уже вот здесь. Вот она копия. Counter пока 1. Выполняемся. Теперь он равен 0. Обратите внимание, у нас работают первые половины методов. Первая половина метода 2. Первая половина метода 1. Первая половина метода 0. Это у нас шел оригинал, первая копия, вторая копия. Так, counter != 0 – false. Мы зайдем сюда? Нет, не зайдем. Шагаем дальше. Смотрите, отрабатывает вторая половина метода, вторая половина второй копии. Мы сейчас отработали вот здесь. Дальше. Переходим в код. Смотрим. Куда мы вернулись? Вот куда мы вернулись. Мы находимся здесь сейчас. И сейчас у нас выведется что? 1. Смотрите, counter = 1. Выводим 1. Мы сейчас в оригинале. Counter = 2. Мы уже находимся в оригинале. Еще раз, обратите внимание на этот слайд, как мы прошлись рекурсивно по методу. Рекурсия – это самовызов. Вот вы видите тот вывод, который у нас получился в нашем примере. Видите то что мы с вами выполняли. Вот как у нас отработала рекурсия. Что нам напоминает рекурсия? Рекурсия нам напоминает некие циклы. Какие-то циклически выполняемые действия. Просто? Просто. А мы идем дальше. Обратите внимание, Здесь мы с вами разберем понятие сложной рекурсии. Давайте зайдем в презентацию и вспомним такую вещь. Смотрите, у нас имеется первый метод и имеется второй метод. Мы понимаем, что мы из тела одного метода можем вызывать другие методы. Из одного метода мы вызываем другой метод. Но иногда бывает так, что мы можем вызывать себя через другой метод. Если до этого мы смотрели как сами же вызываем себя, то в сложной рекурсии я не могу сказать Саша. Я говорю: «Иван, позови пожалуйста меня.» И он зовет меня. Давайте посмотрим, как это выглядит в коде.