argon bulletin board

Факултети => Факултет по математика и информатика => Темата е започната от: VooDooMaN в 27.04.2006, 17:11:54

Титла: Рекурсия
Публикувано от: VooDooMaN в 27.04.2006, 17:11:54
Познат ли Ви е примера от по-долу? Най-тривиалният, с който се сблъскваме в университета след "Hello World!". Като пример е чудесен, като реално приложим код адски слаб. Дали навсякъде се обяснява защо...

int Factorial( int number ) {
    if ( number == 1 ) {
        return 1;
   }
    else {
        return number * Factorial( number - 1 );
    }
}
Титла: Re: Рекурсия
Публикувано от: Райчо Мукелов в 27.04.2006, 21:28:47
И на мен ми беше странно това, при положение че може с цикъл и без рекурсия. По-добър пример за рекурсия би бил да речем намиране на пермутации. Може би това с факториела е по-разбираемо ако никога не си се сблъсквал с рекурсия.
Сещам се за нещо кoето четох някъде, не се сещам кой го е казал : "Повторението е прекрасно, рекурсията е божествена " :)
Титла: Re: Рекурсия
Публикувано от: VooDooMaN в 28.04.2006, 10:06:12
Аз пък прочетох следното:

In general, recursion leads to small code and slow execution and chews up stack space. For a small group of problems, recursion can produce simple, elegant solutions. For a slightly larger group of problems, it can produce simple, elegant, hard-to-understand solutions. For most problems, it produces massively complicated solutions—in those cases, simple iteration is usually more understandable. Use recursion selectively.

За Факториел и Фибоначи при нарастване на числата рекурсията ще гълта безсмислено много памет и то при положение, че с итерация сложността ще е линейна. Със сигурност има места, където е полезна, но в общия случай е трудна за разбиране и гълта много памет.
Титла: Re: Рекурсия
Публикувано от: JOKe` в 28.04.2006, 10:06:35
забелязал съм че го дават в книгите за начинаещи за програмиране като пример за рекурсия незнам защо
да си призная едно време като за първи път четох рекурсия макар и с този пример пак не го разбрах :))s
Титла: Re: Рекурсия
Публикувано от: Jack Johnson в 28.04.2006, 14:43:32
Аз мисля, че като за първи пример за първа рекурсия този код е идеален. Аз лично научих рекурсията именно с този пример (не от този форум, някой да не помисли нещо друго).
Титла: Re: Рекурсия
Публикувано от: BORIME4KA в 05.05.2006, 13:30:17
Явно, част от колегите са чели книжките само до глава "Рекурсия"... Или поне в тези книжки, които аз съм чел, после е показано колко по-добра е производителността при използване на итеративно решение (особено за Фибоначи)...
Иначе примерът е ясен, но ако аз трябваше да илюстрирам рекурсията, бих ползвал това:
(http://www.math.ubc.ca/~jbryan/recursion.jpg)
Титла: Re: Рекурсия
Публикувано от: VooDooMaN в 05.05.2006, 14:19:05
Кой по-конкретно визираш?
Титла: Re: Рекурсия
Публикувано от: Jack Johnson в 05.05.2006, 15:07:42
Явно, част от колегите са чели книжките само до глава "Рекурсия"...

Супер, само че снимката по мое мнение е пример по-скоро за фрактална алгебра, отколкото за рекурсия.

Иначе снимката момчето я държи с дясната ръка, следователно това е дясна рекурсия :)
Титла: Re: Рекурсия
Публикувано от: VooDooMaN в 05.05.2006, 16:30:10
Малко е скалъпен примера със снимката  :wink:, по-реално щеше да е ако не беше снимка, а телевизор.