Обяснете чрез рекурсия как:
- Отивате от вас до площада.
- Изхарчвате всичките си пари.
- Изяждате цяло пакетче бисквити :-)
- Преглеждате всички непрегледани публикации във Фейсбук.
- Решавате чрез рекурсия всички подзадачи в тази задача.
Всяко решение трябва да съдържа прости стъпки, условие за дъно на рекурсията и рекурсивно извикване. Давам пример за рекурсивно решение на пресмятането на броят на цифрите на положително число:
- Ако числото е по-малко от 10, броят на цифрите му е равен на 1
- В противен случай, броят е равен на 1 + броят на останалите цифри на числото без последната (т.е. на броят на цифрите на числото, делено на 10).
Предложете и ваши задачи, демонстриращи използване на рекурсия в живота.
2. За да си изхарчим всичките пари, които имаме, трябва да започнем да харчим лев по лев преди да стигнем последния лев. Тоест дъното ще е последния ни лев.
пари в портмоне (брой) {
харчим един лев;
ако(брой>1)
пари в портмоне(брой-1);
}
На прав път си с разсъжденията, но твоята функция работи само ако харчим винаги по 1 лев и ако тръгваме от непразно портмоне. Ето я все пак, малко подредена:
*Изхарчвате всичките си пари:
ако разполагаме с 10 лева, за да обясним рекурсивно изхарчването на всичките си пари,
можем да кажем следното: правим някаква покупка и проверяваме в джоба си – ако не са ни останали пари
в джоба, значи сме се справили успешно и сме изхарчили всичките си пари, ако обаче имаме още пари в джоба,
си купуваме още нещо, за да не ни останат никакви, т.е. продължаваме да купуваме, докато не останем без пари.
Дъното на рекурсията е условието да не ни останат никакви пари.
*Преглеждате всички непрегледани публикации във Фейсбук:
Първо си отваряме Facebook :D Виждаме, че имаме например 7 непрегледани публикации. Отваряме първата,
остават ни 6 нерегледани публикации.. отваряме следващата, остават ни 5 непрегледани публикации.. продължаваме,
докато не прегледаме всички 7 публикации.. дъно на рекурсията е условието да не останат непрегледани
публикации.
За изхарчването на всичките ни пари – вярно е, ще го напиша по-кратко така:
За преглеждането на публикациите – обяснил си го с итерации (т.е. с цикъл), а не с рекурсия. За да бъде рекурсивно обяснение, трябва да изглежда така:
1.За да решим тази задача трябва да изпълним 5 условия
Започваме да решаваме задачата;
Условията на задачата(брой) {
решаваме едно условие;
ако броя на нерешените задачи е по-голям от 1 или (брой>1)
броя на останалите нерешените условия е равно на (брой-1)
и ги решаваме докато не достигнем дъното, кое е да сме решили всички условия
} в този случай публикуваме цялата задача
На прав път си. Ето твоето решение, малко подредено:
Гери, задачата е вярна като обяснения, но не съвсем като код – липсва рекурсивното извикване и проверката трябва да е b==1. Освен това p е функция, а не променлива.