Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Рекурсия

Featured Replies

Някой може ли да ми обясни като на пълен идиот как точно действа рекурсията и как точно се използва, защото наистина не мога да го схвана. Ще съм ви благодарен ако някой ми го обясни като на малко дете. Предварително мерси!

Ами, не е толкова сложно ...

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

Например:

void sayHello(int nTimes)
{
     if (nTimes) //ако nTimes > 0 ...
     {
        //изписваме "Здрасти!" на екрана ...
        printf("Здравей за %d път!", nTimes);

        //намаляваме стойността на аргумента ...
        --nTimes;

        //после викаме себе си, но с новата стойност на аргумента nTimes ...
        sayHello(nTimes);
     }
}

void main(...)
{
  int nTimes = 10; //колко пъти да каже "здрасти!"
  sayHello(nTimes);
}

Когато nTimes стане 0, програмата ще преустанови работа ...

  • Автор

Да, ясно имам представа за основния принцип на работа, т.е. какво трябва да стане, също мога да намеря и n! (n faktoriel) обаче не мога да си обясня какво точно се случва във рекурсията и затова не мога и да я използвам точно....

  • Автор

Лошо..... преди 2 часа бях там Публикувано изображение

Може ли да чуя как действа самата рекурсия, всмисъл как точно се извиква.....

Например обръщане на символен низ с рекурсия, как действа рекурсията в този случай?

За съжаление трябва да се чете (много). Аз пробвах без четене, ама не става!

Книги в които се говори за ракурсия и е обяснена (добре) са:

Програмиране = ++Алгоритми от П.Добриков и Пр.Наков,

ревю на книгата може да се прочете в нет-а

Програмиране = ++Алгоритми

и

Магдалина Тодорова, Програмиране на С++ (част първа и част втора), Сиела, София, 2002

http://www.math.bas.bg/~nkirov/book1/book1_ref.html

Аз лично харесвам повече книгата (2-та тома) на Тодорова, заради изчерпателните обяснения и множество примери.

Успех!

Greg

  • 1 месец по-късно...

Здрасти, понеже на времето имах подобен проблем, ще се опитам да ти го обясня по-прости4ко. ... metodА(){ // започващ метод int a = 4; // декларираме и инициализираме "а" int b = metod2(a); //декларираме и инициализираме "b" - тука "b" се инициализира чрез функция от "а", т.е. "b" извиква и е равен на метод2(а) SOP (b); //изпечатваме "b" } int metodБ(int c){ //метода връща инт стойност(това е важно) а "c"=4(нали "а" е 4) c=c+2; // това е ясно - "c" вече е равно на 4+2=6 if(c<10){ // проверка - 6<10 да, зна4и преминава на следващия ред c=metodБ©;} //"c" вика(и е равен) на методБ©.Забележи - това копие на методБ ще е със стойност в скобите вече 6!!! А самия този метод още не е приключил!!! return c; //връща стойността на МЕТОДА КОЙТО ГО Е ИЗВИКАЛ Ако не ти е съвсем ясно ще ти дам пояснения: в методБ където с=методБ(с) си представи една поредица от копия на методБ условно ще ги кръстя методБ1,методБ2..., но то е условно само за да разбереш. в първия методБ т.е методБ1 с=4, след това на 4+2. проверка 6<10 да,значи се изпълнява следващия ред - с=методБ2(с). Тука се образува нов методБ - методБ2, но методБ1 още не е приключил(всъщност той приключва последен) та в този условен методБ2 входящата стойност вече е 6!!! тамошното с=6+2=8 и т.н вика отново методБ(условно Б3) ...и този метод(Б2) не е приключил(много е важно това!!!) ..... и така в методБ3 с влиза 8, с=8+2=10. проверка 10<10 НЕ!!! -> разбива "if(10<10){..}" и преминава на следващия ред (и това е в условен методБ3) реда е "return c" методБ3 приключва съществуването си, предава резултата на методБ2(който, ако си спомняш, не е приключил още) какво става в методБ2 - седим на реда "с=методБ(с)" но тъй като методБ3 ни върна стойност 10 значи с=10, и методаБ2 преминава на следващия ред...които пак е "return c". Той също връща стойност, и също приключва съществуването си!!! И стигаме до най-първия методБ1 или само методБ, който СЪЩО чака "с" да получи стойност. с получава 10, и методБ връща стойността на методА -> б=10; Много е важно да знаеш и друго - метод, извикан от друг метод, връща стойността САМО на него!!! методА извика методБ, и получи стойност от него, а методБ, за да реши казуса(с<10) вика сам себе си, и си връща резултата на себе си, докъто се изпълни условието!!! т.е. в първия методБ беше "инт методБ(6)..." втория" инт методБ(8)..." и т.н. хуууу, изморих се, но надявам се че съм ти помогнал !!! Още веднъж ако ще ти е по-лесно, представи си, че рекурсивния метод (Б) е като паралелни вселени... :bye:

  • 6 години по-късно...

Някой може ли да ми обясни като на пълен идиот как точно действа рекурсията и как точно се използва, защото наистина не мога да го схвана. Ще съм ви благодарен ако някой ми го обясни като на малко дете. Предварително мерси!

Тук е обяснено много ясно, макар че е на английски:

http://pages.cs.wisc.edu/~vernon/cs367/notes/6.RECURSION.html

Тук е обяснено много ясно, макар че е на английски:

http://pages.cs.wisc....RECURSION.html

Някой да е обърнал внимание че последния пост е от преди шест години и половина?

Някой да е обърнал внимание че последния пост е от преди шест години и половина?

Хиляди, милиони, милиарди извинения. Извинявам се. Извинявам се. Извинявам се. Ако можех щях да го изтрия. Който е с администраторски права може да го махне, много ще се радвам. Аз изчезвам. Ако изтриете и профила ми (niibg) ще съм Ви още по-признателен. Благодаря.

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.