argon bulletin board

Експертно търсене  

Новини:

Регистрирането на нови потребители е временно деактивирано.

Автор Тема: Рекурсия  (Прочетена 2540 пъти)

VooDooMaN

  • Гост
Рекурсия
« -: 27.04.2006, 17:11:54 »

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

int Factorial( int number ) {
    if ( number == 1 ) {
        return 1;
   }
    else {
        return number * Factorial( number - 1 );
    }
}
Активен

Райчо Мукелов

  • Неактивен Неактивен
  • Публикации: 486
  • I snuggle with subwoofers
    • HULTIG - Human Language Technlogy and Bioinformatics Interest Group
Re: Рекурсия
« Отговор #1 -: 27.04.2006, 21:28:47 »

И на мен ми беше странно това, при положение че може с цикъл и без рекурсия. По-добър пример за рекурсия би бил да речем намиране на пермутации. Може би това с факториела е по-разбираемо ако никога не си се сблъсквал с рекурсия.
Сещам се за нещо кoето четох някъде, не се сещам кой го е казал : "Повторението е прекрасно, рекурсията е божествена " :)
« Последна редакция: 28.04.2006, 15:47:10 от sasquatch »
Активен

VooDooMaN

  • Гост
Re: Рекурсия
« Отговор #2 -: 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.

За Факториел и Фибоначи при нарастване на числата рекурсията ще гълта безсмислено много памет и то при положение, че с итерация сложността ще е линейна. Със сигурност има места, където е полезна, но в общия случай е трудна за разбиране и гълта много памет.
Активен

JOKe`

  • Гост
Re: Рекурсия
« Отговор #3 -: 28.04.2006, 10:06:35 »

забелязал съм че го дават в книгите за начинаещи за програмиране като пример за рекурсия незнам защо
да си призная едно време като за първи път четох рекурсия макар и с този пример пак не го разбрах :))s
Активен

Jack Johnson

  • Неактивен Неактивен
  • Публикации: 704
  • Хора, пазете си здравето! То няма цена!
Re: Рекурсия
« Отговор #4 -: 28.04.2006, 14:43:32 »

Аз мисля, че като за първи пример за първа рекурсия този код е идеален. Аз лично научих рекурсията именно с този пример (не от този форум, някой да не помисли нещо друго).
Активен

BORIME4KA

  • Неактивен Неактивен
  • Публикации: 86
    • http://psabev.blogspot.com
Re: Рекурсия
« Отговор #5 -: 05.05.2006, 13:30:17 »

Явно, част от колегите са чели книжките само до глава "Рекурсия"... Или поне в тези книжки, които аз съм чел, после е показано колко по-добра е производителността при използване на итеративно решение (особено за Фибоначи)...
Иначе примерът е ясен, но ако аз трябваше да илюстрирам рекурсията, бих ползвал това:
Активен

VooDooMaN

  • Гост
Re: Рекурсия
« Отговор #6 -: 05.05.2006, 14:19:05 »

Кой по-конкретно визираш?
Активен

Jack Johnson

  • Неактивен Неактивен
  • Публикации: 704
  • Хора, пазете си здравето! То няма цена!
Re: Рекурсия
« Отговор #7 -: 05.05.2006, 15:07:42 »

Явно, част от колегите са чели книжките само до глава "Рекурсия"...

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

Иначе снимката момчето я държи с дясната ръка, следователно това е дясна рекурсия :)
Активен

VooDooMaN

  • Гост
Re: Рекурсия
« Отговор #8 -: 05.05.2006, 16:30:10 »

Малко е скалъпен примера със снимката  :wink:, по-реално щеше да е ако не беше снимка, а телевизор.
Активен