Рекурсия в C# част II ?


3

Защо в програмата за C# част II няма лекция "Рекурсия"?
Домашното за "Масиви" има задачи изискващи рекурсия.


Ще учим ли рекурсия в настоящата част или тя ще остане като аналог на масивите от C# Част I (на теория можеш да си решиш изпита и без тях, но ако ги знаеш ще можеш наистина да си решиш изпита)?

 

Off: Аз лично започнах да решавам задачите за "Масиви", в един момент изглеждаше наложително да се прилагат методи. Спрях, изгледах лекцията за "Методи" и четох от учебника, реших и 10-тина задачи от домашното "Методи" и след това се върнах на масивите и реших още няколко задачи и спрях пак! И от ден и половина се гърча с рекурсията, за да мога да си дореша и последните задачи от "Масиви".




Отговори



0
Рекурсия няма да има в курса по C# 2, преместена е в по-нататъчните курсове. Ако не се лъжа в структури от данни, но очевидно определено ще е добре да я научим ако успеем. Колкото повече научим от следващите курсове, плюс сегашния разбира се, толкова по-полезно и лесно ще ни бъде на изпита може би.

от mbelev (2312 точки)


0
Доколкото си спомням, на нашия изпит (пролетната академия) една от шампионските задачи включваше генериране на някакви думи, което може да се реши рекурсивно като комбинации, вариации или пермутации (не помня конкретно условието).

от varbanoff (2325 точки)


5
Рекурсията е в Структури от данни и алгоритми. А я няма, защото не може всичко наведнъж да се преподаде в един единствен курс, въпреки че материала се преплита. Освен това, лесно се борави с нещо, което си учил от а и б, но не всички умеят да боравят с неща, които са им нови, и не всички имат изграден подход - сами да ровят, да се информират и да търсят решения. Приеми я точно като масивите за C# 1. Може и без нея, но е хубаво поне да знаеш, че я има. Освен това, колкото по отрано си чувал за нещо, толкова по-лесно ще ти е после, когато ти се налага да го ползваш за по-сложни неща. Със задачите за сортиране не само се понаучава за рекурсия (за който търси и си поблъска главата), но освен това се научават и някои основни алгоритми за сортиране, и се добива представа за сложност на алгоритъм и т.н. Не може преди да знаеш какво е алгоритъм, да ти говорят за сложност. Не може преди да знаеш какво е масив, да учиш, че масивите могат да се сортират. Но когато знаеш какво е масив и че може да се сортира, е логично да достигнеш до въпроса "A как се сортира?". Ами така – с алгоритми за сортиране, които са ги измислили математиците, а в програмирането се прилагат. Как се прилагат – ами quick sort е с рекурсия, друг - може да е по друг начин.

от varbanoff (2325 точки)


0
като допълнение ... нали не очаквате да напишеме алгоритъм за сортиране ... да ще работи горе долу но има едва ли не сертифицирани алгоритми за които се нзае че са най оптимални с възможно най малко излишни команди присвояване на променливи и т.н. например сравнете си select sort-a от домашното и вижте в книгата на Преслав Наков (директно сортиране колко % е съвпадението)

от ludmil.d (490 точки)


1
Не е включена рекурсия за да си я включиме сами и да се поинтересувам как стаа тази работа с рекурсията когато се ровиш и откриваш нещата сам ти се подхранва интереса а не като в макдоналдс всичко е смляно и само отваряй устата и дъвчи ... архивните курсове са отворени книгата също отваря се и се чете стабилно ... и за напред ще е така... и както gataka каза в една от лекциите не очаквайте когато започнете работа да си напишете проблема в stackoverflow и някой доброжелателен гуру да ви напише приложението ... за това много тръгват малко стигат ала бала
arrow to the knee and keep coding :))

от ludmil.d (490 точки)


0
Рекурсията е мощно оръжие, но в ръцете на знаещия. Срещам доста примери в нета с рекурсии и малко на брой (благодарен съм че ги има) анализи на тези примери, защо конкретно решение е по-бавно или по-енергоемко (разбирай ползва повече памет) решено с рекурсия, така че разбирам защо са изнесли темата в отделен цикъл лекции.

от redOne (0 точки)


1

Мисля, че с тази книга "Programming =++ Algorithms" в ръка ще минеш по-лесно, а и най-важното ще намериш структурирана и добре подредена информация по всичко, което е нужно за домашните - http://www.programirane.org/. - Рекурсия, сортиране, търсене, комбинации, вариации. Но можеш да погледнеш и архива за структури от данни и алгоритми.

Кода е на C, но нещата са идентични със C# не е толкова зор да си го обясниш ... кофтито е, че има много математика, но с по-внимателно четене се успява да се хване идеята дори и от хора без такива познания по математика – като мен.

По отношение на неученото ... така е в академията. На C# 1 изпита се падна задача, за която в C# 2 има цяла лекция - Shunting Yard, Reverse Polish NOtation. Стекове, Опашки и т.н. С две думи свиквай :)


от deyan.todorov (1019 точки)


0

В подкрепа на казаното от @redOne аз зададох същия въпрос защо не ни учат на рекурсия на един QA не от Телерик той ми каза следното "...в България има много неграмотни програмисти които ползват рекурся за щяло и нещяло защото е лесна и бързо се пише без да знаят кога да я ползват..."  и както ми обясни всяка една задача която може да се реши с рекурсия може да се реши и по друг начин. Не твърдя че е така но предполагам че някои по знаещ е решил първо да ни научат на другите начини и после кога се ползват в структури от данни и алгоритми и тогава на рекурсия

това е лекцията за рекурсия иначе


от petar_nikov (564 точки)


0
Аз съм абсолютно начинаещ в програмирането, но след като видях как зависва компютъра докато смята рекурсивно числата на Фибоначи и как си ги смята без да се замисли итеративно съм абсолютно убеден, че рекурсията не е за всеки. Ще цитирам Наков "Мощно оръжие с което може да се застрелятеа в крака".
Явно ще трябва да учим още доста преди да имаме необходимите знания да овладеем правилно Рекурсията

от wnvko (3123 точки)


0
Един съвет от личен опит, ако искате да научите рекурсията добре хванете един функционален език по избор (Haskell, F#, SML...) и го поразучете. Там почти всичко се прави с рекурсия просто искате - не искате ще свикнете с нея :)

от ktsarnakliyski (1115 точки)


2
Няма задача, изискваща абсолютно наложително рекурсия нито в първа, нито във втора част на C#. Просто има задачи които се решават в пъти по-лесно с рекурсия. Никой не ви "насилва" да я ползвате, но все по някое време ще стигнете до заключението че рекурсията е по-добрия вариант за решаване на дадена задача.
Докато асистирах на упраженията от есенния прием няколко пъти предлагах на човека на който помагам да избере начин аз решаване на побитовите задачи. Такава задача може да се реши като в началото си прехвърлите битчетата в масив от int-ове и да работите с него, или да боравите директно с битовете на някакво int число. С някои от вас съм решавал задачите и по двата начина. Надявам се съм успял да покажа че чисто побитовото решение е по-кратко и по-разбираемо, с по-малко места за допускане на грешки.
Няма "грешно" място за ползване на рекурсията или за неползването й. Има неуместно място. Има и място, където неползването на рекурсията е неуместно.

от JulianG (5316 точки)


8

Единият отговор е: рекурсия не ти трябва за изпита и няма да има задача, която да я изисква. По същия начин както нямаше задача, която да изисква масивите на предишния изпит.

Комбинаторните алгоритми като пермутация, комбинация и варияция имат и рекурсивен и итеративен (с цикли) подход, така че ако има такава задача, няма да е проблемна. Естествено с циклите е по-трудно, но пък такава задача обикновено е за шампиони.

Другият отговор е: ето ти едно видео, започвай да я учиш:

http://www.youtube.com/watch?v=i88ylfuZv5s

Рекурсията е трудна за осмисляне и трябват месеци, за да се придобие мисленето, нужно за такъв тип алгоритми. Колкото по-рано я разбереш, толкова по-лесно ще решаваш конкретни задачи и по време на изпита по структури от данни и алгоритми, няма да имаш никакъв проблем да си завъртиш една рекурсийка. Ако я оставиш чак за тогава (което е след 3 месеца) може и да се чудиш какво се случва. Естествено, за рекурсия ти трябват методи:

http://www.youtube.com/watch?v=nzbh8o8tqJw


от ivaylo.kenov (30760 точки)


0
Напълно съм съгласен, че се осмисля трудно. При досегашния ми досег с програмирането съм стигал горе-долу до материала за методи (от курса). Реших да погледна рекурсията и наистина ми е трудно да разбера точно какво прави (на практика) и как се пише правилно. Леко ми се сбръчка мозъка :)

от dimo.petrof (2887 точки)