Тёмный

Рекурсия за 15 минути 

C# in 15 minutes
Подписаться 3,2 тыс.
Просмотров 4,1 тыс.
50% 1

Нека да си поставим цел - да съберем всички числа от 1 до n. Ако n е 4, то тогава събиането би било - 4 + 3 + 2 + 1. До тук в канала сме обсъждали методи и функции и цикли.
Лесно бихме могли да излезем със заклчението, че можем да постигнем това като разпишем следния метод;
public static int SumNumsN(int n)
{
int sum = 0;
for (int i = n; i &gt= 1; i--)
{
sum += i;
}
return sum;
}
Как бихме могли да решим същия проблем с рекурсия? Днес ще си говорим за ......, което още в началото трябва да отбележим, че е поне два пъти по-бавно от итерацията и че, ако н е голямо число, то това не изменно ще доведе до препълване на стака.
Нека да видим как бихме могли да го имплементираме и да видим и защо е толкова бавно.
Казваме на нещо, че е рекурсия, ако една функция се вика директно или индиректно сама себе си. Рекурсивната функция се състои от две части:
- дъно на рекурсията (тоест кога ще спре да се извиква ) и извикването на самата функция в себе си.
Ето как бихме могли да дефинираме дъното на една рекурсивна функция:
public static int SumNums(int n)
{
if (n == 1)
{
return 1;
}
}
До тук добре, но къде е частта, която я прави рекурсивна? Нека добавим реда, който ще накара функцията да вика сама себе си:
public static int SumNums(int n)
{
if (n == 1)
{
return 1;
}
return n + SumNums(n - 1);
}
Интересният момент тук е, че последния ред ни дава ясно да разберем, че стигайки до него функцията ще се викне отново, само че параметърът ще бууде n - 1.
Ето как би работило:
static void Main(string[] args)
{
Console.WriteLine(SumNumsN(4));
}
public static int SumNums(int n)
{
if (n == 1)
{
return 1;
}
return n + SumNums(n - 1);
}
Викаме функцията с параметър n = 4. То влиза във функцията и вижда, че н не е едно и се самоизвиква. Имаме второ извикване, което отново влиза в себе си като н-1 т.е. 3, после 2 и после 1. Сега обаче стигнахме дъното на рекурсията, която връща стойност 1
Това означва, че започваме по обратния път с стака да заместваме стойностите и накрая стигаме до 4 +3 + 2 + 1. Което се връща обратно в мейн метода и ни принтира резултатът 10 на конзолата.

Опубликовано:

 

23 авг 2019

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 8   
@user-cv4jn4pg5p
@user-cv4jn4pg5p 7 месяцев назад
mnoo si sladka ;O :))
@stanivan3977
@stanivan3977 4 года назад
Първи!
@stanivan3977
@stanivan3977 4 года назад
00:12 ей сега! :)
@yordandobrev7396
@yordandobrev7396 4 года назад
Супер добро обяснение! Ще има ли видеа за по advanced дървета , комбинаторика и графи, защото изпитвам доста затруднения с разбирането им ?
@codewithfinesse1599
@codewithfinesse1599 4 года назад
Да! Напоследък такава вълна ме е ударила, така че ще има - съвсем скоро ще излезе binary search, а после и дървета и графи :)
@okotog
@okotog 3 года назад
Не е лошо да слагаш линкове на предишно и следващо видео в описанието и на кутийки в края на видеото
@codewithfinesse1599
@codewithfinesse1599 3 года назад
На някои слагах, но явно повечето съм ги пропуснала. Ще ги прегледам. Мерси
Далее
Масиви за 15 минути C#
14:16
Просмотров 13 тыс.
Ручка из шланга, лайфхак
00:11
Просмотров 16 тыс.
impossible to understand how😨❓
00:14
Просмотров 438 тыс.
This is a Better Way to Understand Recursion
4:03
Просмотров 31 тыс.
Виктор Даков за 15 минути
13:48
Просмотров 4,1 тыс.
Методи за 15 минути C#
15:11
Просмотров 9 тыс.
Ивайло Кенов за 15 минути
12:51
Просмотров 12 тыс.
Learn RECURSION in 5 minutes! 😵
5:59
Просмотров 138 тыс.
Ручка из шланга, лайфхак
00:11
Просмотров 16 тыс.