Рекурсията в живота

Обяснете чрез рекурсия как:

  1. Отивате от вас до площада.
  2. Изхарчвате всичките си пари.
  3. Изяждате цяло пакетче бисквити :-)
  4. Преглеждате всички непрегледани публикации във Фейсбук.
  5. Решавате чрез рекурсия всички подзадачи в тази задача.

Всяко решение трябва да съдържа прости стъпки, условие за дъно на рекурсията и рекурсивно извикване. Давам пример за рекурсивно решение на пресмятането на броят на цифрите на положително число:

  1. Ако числото е по-малко от 10, броят на цифрите му е равен на 1
  2. В противен случай, броят е равен на 1 + броят на останалите цифри на числото без последната (т.е. на броят на цифрите на числото, делено на 10).

Предложете и ваши задачи, демонстриращи използване на рекурсия в живота.

Публикувано в 12а, 12в с етикети . Постоянна връзка.

8 коментара по Рекурсията в живота

  1. maleboldjia каза:

    2. За да си изхарчим всичките пари, които имаме, трябва да започнем да харчим лев по лев преди да стигнем последния лев. Тоест дъното ще е последния ни лев.

    пари в портмоне (брой) {
    харчим един лев;
    ако(брой>1)
    пари в портмоне(брой-1);
    }

    • Данаил каза:

      На прав път си с разсъжденията, но твоята функция работи само ако харчим винаги по 1 лев и ако тръгваме от непразно портмоне. Ето я все пак, малко подредена:

      харчене на пари (брой) {
          харчим един лев;
          ако(брой>1)
              харчене на пари(брой-1);
      }
  2. kr1stiqn1995 каза:

    *Изхарчвате всичките си пари:
    ако разполагаме с 10 лева, за да обясним рекурсивно изхарчването на всичките си пари,
    можем да кажем следното: правим някаква покупка и проверяваме в джоба си – ако не са ни останали пари
    в джоба, значи сме се справили успешно и сме изхарчили всичките си пари, ако обаче имаме още пари в джоба,
    си купуваме още нещо, за да не ни останат никакви, т.е. продължаваме да купуваме, докато не останем без пари.
    Дъното на рекурсията е условието да не ни останат никакви пари.

    *Преглеждате всички непрегледани публикации във Фейсбук:
    Първо си отваряме Facebook :D Виждаме, че имаме например 7 непрегледани публикации. Отваряме първата,
    остават ни 6 нерегледани публикации.. отваряме следващата, остават ни 5 непрегледани публикации.. продължаваме,
    докато не прегледаме всички 7 публикации.. дъно на рекурсията е условието да не останат непрегледани
    публикации.

    • Данаил каза:

      За изхарчването на всичките ни пари – вярно е, ще го напиша по-кратко така:

      похарчване на (пари) {
        правим покупка за дадена цена;
        пари=пари-цена;
        ако (пари > 0)
          похарчване на (пари);
      }

      За преглеждането на публикациите – обяснил си го с итерации (т.е. с цикъл), а не с рекурсия. За да бъде рекурсивно обяснение, трябва да изглежда така:

      преглеждане на непрегледани публикации () {
        ако (има такива) {
          преглеждаме една; 
          отбелязваме я като прегледана;
          преглеждане на непрегледани публикации ();
        }
      }
  3. marant каза:

    1.За да решим тази задача трябва да изпълним 5 условия
    Започваме да решаваме задачата;
    Условията на задачата(брой) {
    решаваме едно условие;
    ако броя на нерешените задачи е по-голям от 1 или (брой>1)
    броя на останалите нерешените условия е равно на (брой-1)
    и ги решаваме докато не достигнем дъното, кое е да сме решили всички условия
    } в този случай публикуваме цялата задача

  4. Gerry06 каза:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int p (int b) // декларираме променлива за пакетчето и друга за бисквитите
    {
       if (b=1) // постявяме дъното на рекурсията, т.е. докога ще ядем (чрез условна команда: ако това ни е последната бисквитка)
       return  0;//ако сме достигнали дъното,изяждаме последната бисквитка, т.е. сме изяли цялото пакетче
       else return 1  ; //ако не - продължаваме да ядем 
    }
    
    int main(int argc, char *argv[])
    {
        int n;
        cout<<"Vuvedete broi biskvitki: ";
        cin>>n;
        cout<<p(n);
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

Вашият коментар