SlideShare a Scribd company logo
1 of 15
1       10.2.2013 г.




Рекурсия и рекурсивни
функции в езика C++
2             10.2.2013 г.




    Произход на думата рекурсия
„Rеcur“ – от анлг. език: връщам се,
случвам се отново.
Примери:
3              10.2.2013 г.




    Определение за рекурсия

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

Още два примера:
4                     10.2.2013 г.




       Примери в C++
Числата на Фибоначи:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, …
F1 = F2 = 1
Fi = Fi-1 + Fi-2 (за i > 2)

Факториел на n или n! :
f(1)! = 1 f(2)! = 1*2 f(3)! = 1*2*3

f(n)! = n * f(n-1)!
5            10.2.2013 г.




          Видове рекурсия
 Пряка  рекурсия - в тялото на метод се
  извършва обръщение към същия
  метод.
 Косвена рекурсия - Ако метод A се
  обръща към метод B, B към C, а С
  отново към А, казваме, че методът А,
  както и методите В и C са непряко
  (косвено) рекурсивни

    Пример (Непряка рекурсия):
6       10.2.2013 г.




Реализация на числата на Фибоначи

  double fib(int n) {
    if (n <= 2)
    return 1;
   else
   return fib(n - 1) + fib(n - 2);
 }

 Пример за пряка рекурсия
7          10.2.2013 г.




             Дъно на рекурсията

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

Пример с числата на Фибоначи:

          if (n <= 2)
                               Дъно
             return 1;
8       10.2.2013 г.




Рекурсия vs. Итерация
9                10.2.2013 г.




             Рекурсията :
   По-четлива и елегантна от итеративното
    решение.


   Консумира повече памет и ресурси.


   Понякога можем да постигнем по-просто
    решение от итеративното.



   А понякога постигаме много по-сложно.
10             10.2.2013 г.



  Как да създадем рекурсивен метод ?

 Разбиване   на задачата на подзадачи



 Подзадачите трябва да се стремят да
 стигнат дъното на рекурсията.



 Комбинирането  на решенията на
 подзадачите да получава решението
 на цялата задача.
11           10.2.2013 г.




      Примерна реализация на n!
   Намиране на рекурентна зависимост:

0! = 1
1! = 1*1*0! = 1
2! = 2*1 = 2*1!
3! = 3*2*1 = 3*2!
4! = 4*3*2*1 = 4*3!
5! = 5*4*3*2*1 = 5*4!
n = n*(n-1)!

   Реализация

- Дъно – при n = 0
12          10.2.2013 г.




       Реализация на C++
double factorial(int n) {
 // Дъно на рекурсията
 if (n == 0)
    return 1;

// Рекурсивно извикване: Методът извиква себе
си
 else
   return n * factorial(n - 1);
 }
13               10.2.2013 г.




Числата на Фибоначи –
неефективна реализация




 Имаме много повтарящи се изчисления.
14                 10.2.2013 г.


            Изводи:
   Избягвайте рекурсията ако не сте сигурни как работи.




   Винаги търсете и итеративни решения, за да имате база
    за сравнение.



   Ако постигаме по-просто, кратко и по-лесно за
    разбиране решение, като това не е за сметка на
    ефективността и не предизвиква други странични ефекти,
    тогава можем да предпочетем рекурсията.
15         10.2.2013 г.




Изготвил: Георги Мирчев
Фак. Номер: 0901261023

More Related Content

What's hot

20. Растенията - производители на храна - ЧП, 4 клас, Булвест
20. Растенията - производители на храна - ЧП, 4 клас, Булвест20. Растенията - производители на храна - ЧП, 4 клас, Булвест
20. Растенията - производители на храна - ЧП, 4 клас, БулвестVeska Petrova
 
Забележителности в родното селище - ОС - 2 клас
Забележителности в родното селище - ОС - 2 класЗабележителности в родното селище - ОС - 2 клас
Забележителности в родното селище - ОС - 2 класVeska Petrova
 
Лични местоимения
Лични местоименияЛични местоимения
Лични местоименияmarianadr
 
гласни звукове обобщение
гласни звукове обобщениегласни звукове обобщение
гласни звукове обобщениеИрена Петкова
 
Междинна диагностика_роден край
Междинна диагностика_роден крайМеждинна диагностика_роден край
Междинна диагностика_роден крайDani Parvanova
 
22. Размножаване на растенията - ЧП, 4 клас, Булвест
22. Размножаване на растенията - ЧП, 4 клас, Булвест22. Размножаване на растенията - ЧП, 4 клас, Булвест
22. Размножаване на растенията - ЧП, 4 клас, БулвестVeska Petrova
 
Правопис на гласни звукове
Правопис на гласни звуковеПравопис на гласни звукове
Правопис на гласни звуковеrossitsazlankova
 
разпределително свойство на умножението
разпределително свойство на умножениеторазпределително свойство на умножението
разпределително свойство на умножениетоПоли Махова
 
33. Опазване на природата - ЧП, 4 клас, Булвест
33. Опазване на природата - ЧП, 4 клас, Булвест33. Опазване на природата - ЧП, 4 клас, Булвест
33. Опазване на природата - ЧП, 4 клас, БулвестVeska Petrova
 
39. Здравословен начин на живот - ЧП, 4 клас, Булвест
39. Здравословен начин на живот - ЧП, 4 клас, Булвест39. Здравословен начин на живот - ЧП, 4 клас, Булвест
39. Здравословен начин на живот - ЧП, 4 клас, БулвестVeska Petrova
 
17. Опазване на природата - РК, Просвета, В. П.
17. Опазване на природата - РК, Просвета, В. П.17. Опазване на природата - РК, Просвета, В. П.
17. Опазване на природата - РК, Просвета, В. П.Veska Petrova
 
съгласни звукове правопис-2 гр.
съгласни звукове правопис-2 гр.съгласни звукове правопис-2 гр.
съгласни звукове правопис-2 гр.Лидия Ганева
 
Строеж на думата - 3 клас
Строеж на думата - 3 класСтроеж на думата - 3 клас
Строеж на думата - 3 класVeselka Veleva
 

What's hot (20)

стихове за деца
стихове за децастихове за деца
стихове за деца
 
20. Растенията - производители на храна - ЧП, 4 клас, Булвест
20. Растенията - производители на храна - ЧП, 4 клас, Булвест20. Растенията - производители на храна - ЧП, 4 клас, Булвест
20. Растенията - производители на храна - ЧП, 4 клас, Булвест
 
Забележителности в родното селище - ОС - 2 клас
Забележителности в родното селище - ОС - 2 класЗабележителности в родното селище - ОС - 2 клас
Забележителности в родното селище - ОС - 2 клас
 
Лични местоимения
Лични местоименияЛични местоимения
Лични местоимения
 
гласни звукове обобщение
гласни звукове обобщениегласни звукове обобщение
гласни звукове обобщение
 
работен лист а ъ о
работен лист а ъ оработен лист а ъ о
работен лист а ъ о
 
Междинна диагностика_роден край
Междинна диагностика_роден крайМеждинна диагностика_роден край
Междинна диагностика_роден край
 
22. Размножаване на растенията - ЧП, 4 клас, Булвест
22. Размножаване на растенията - ЧП, 4 клас, Булвест22. Размножаване на растенията - ЧП, 4 клас, Булвест
22. Размножаване на растенията - ЧП, 4 клас, Булвест
 
Карти за игра по БЕЛ
Карти за игра по БЕЛКарти за игра по БЕЛ
Карти за игра по БЕЛ
 
звукови модели а ъ о
звукови модели а ъ озвукови модели а ъ о
звукови модели а ъ о
 
Правопис на гласни звукове
Правопис на гласни звуковеПравопис на гласни звукове
Правопис на гласни звукове
 
разпределително свойство на умножението
разпределително свойство на умножениеторазпределително свойство на умножението
разпределително свойство на умножението
 
Междинно ниво по мат 3 клас
Междинно ниво по мат 3 класМеждинно ниво по мат 3 клас
Междинно ниво по мат 3 клас
 
Правопис на съгласните звукове
Правопис на съгласните звуковеПравопис на съгласните звукове
Правопис на съгласните звукове
 
33. Опазване на природата - ЧП, 4 клас, Булвест
33. Опазване на природата - ЧП, 4 клас, Булвест33. Опазване на природата - ЧП, 4 клас, Булвест
33. Опазване на природата - ЧП, 4 клас, Булвест
 
39. Здравословен начин на живот - ЧП, 4 клас, Булвест
39. Здравословен начин на живот - ЧП, 4 клас, Булвест39. Здравословен начин на живот - ЧП, 4 клас, Булвест
39. Здравословен начин на живот - ЧП, 4 клас, Булвест
 
17. Опазване на природата - РК, Просвета, В. П.
17. Опазване на природата - РК, Просвета, В. П.17. Опазване на природата - РК, Просвета, В. П.
17. Опазване на природата - РК, Просвета, В. П.
 
растения групи
растения групирастения групи
растения групи
 
съгласни звукове правопис-2 гр.
съгласни звукове правопис-2 гр.съгласни звукове правопис-2 гр.
съгласни звукове правопис-2 гр.
 
Строеж на думата - 3 клас
Строеж на думата - 3 класСтроеж на думата - 3 клас
Строеж на думата - 3 клас
 

Viewers also liked

Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияКурс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияDAVID Academy
 
Динамична памет (оператори new и delete) в C++
Динамична памет (оператори new и delete) в C++Динамична памет (оператори new и delete) в C++
Динамична памет (оператори new и delete) в C++Georgi Mirchev
 
СофтУни - учебен план - май 2014
СофтУни - учебен план - май 2014СофтУни - учебен план - май 2014
СофтУни - учебен план - май 2014Software University
 
Bfs and dfs in data structure
Bfs and dfs in  data structure Bfs and dfs in  data structure
Bfs and dfs in data structure Ankit Kumar Singh
 
How to Write a Cover Letter?
How to Write a Cover Letter?How to Write a Cover Letter?
How to Write a Cover Letter?Svetlin Nakov
 
Sample job motivation letter
Sample job motivation letterSample job motivation letter
Sample job motivation letterJudith Indu
 

Viewers also liked (7)

Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. РекурсияКурс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
Курс по програмиране на C# 2013 - 3. Функции и методи. Рекурсия
 
Динамична памет (оператори new и delete) в C++
Динамична памет (оператори new и delete) в C++Динамична памет (оператори new и delete) в C++
Динамична памет (оператори new и delete) в C++
 
BIKAM Ltd - K2N Teacher Training Guide
BIKAM Ltd - K2N Teacher Training GuideBIKAM Ltd - K2N Teacher Training Guide
BIKAM Ltd - K2N Teacher Training Guide
 
СофтУни - учебен план - май 2014
СофтУни - учебен план - май 2014СофтУни - учебен план - май 2014
СофтУни - учебен план - май 2014
 
Bfs and dfs in data structure
Bfs and dfs in  data structure Bfs and dfs in  data structure
Bfs and dfs in data structure
 
How to Write a Cover Letter?
How to Write a Cover Letter?How to Write a Cover Letter?
How to Write a Cover Letter?
 
Sample job motivation letter
Sample job motivation letterSample job motivation letter
Sample job motivation letter
 

More from Georgi Mirchev

Hear My Thoughts - Server
Hear My Thoughts - ServerHear My Thoughts - Server
Hear My Thoughts - ServerGeorgi Mirchev
 
HearMyThoughts - Android app for helping deaf people
HearMyThoughts - Android app for helping deaf peopleHearMyThoughts - Android app for helping deaf people
HearMyThoughts - Android app for helping deaf peopleGeorgi Mirchev
 
Основи на Андроид
Основи на АндроидОснови на Андроид
Основи на АндроидGeorgi Mirchev
 
Основи на програмирането за андроид
Основи на програмирането за андроидОснови на програмирането за андроид
Основи на програмирането за андроидGeorgi Mirchev
 

More from Georgi Mirchev (6)

Hear My Thoughts - Server
Hear My Thoughts - ServerHear My Thoughts - Server
Hear My Thoughts - Server
 
HearMyThoughts - Android app for helping deaf people
HearMyThoughts - Android app for helping deaf peopleHearMyThoughts - Android app for helping deaf people
HearMyThoughts - Android app for helping deaf people
 
Optical storagе
Optical storagеOptical storagе
Optical storagе
 
J-Unit тестове
J-Unit тестовеJ-Unit тестове
J-Unit тестове
 
Основи на Андроид
Основи на АндроидОснови на Андроид
Основи на Андроид
 
Основи на програмирането за андроид
Основи на програмирането за андроидОснови на програмирането за андроид
Основи на програмирането за андроид
 

Рекурсия и рекурсивни функции в езика C++

  • 1. 1 10.2.2013 г. Рекурсия и рекурсивни функции в езика C++
  • 2. 2 10.2.2013 г. Произход на думата рекурсия „Rеcur“ – от анлг. език: връщам се, случвам се отново. Примери:
  • 3. 3 10.2.2013 г. Определение за рекурсия Рекурсия е програмна техника, при която даден метод извиква сам себе си при решаването на определен проблем. Такива методи наричаме рекурсивни. Още два примера:
  • 4. 4 10.2.2013 г. Примери в C++ Числата на Фибоначи: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, … F1 = F2 = 1 Fi = Fi-1 + Fi-2 (за i > 2) Факториел на n или n! : f(1)! = 1 f(2)! = 1*2 f(3)! = 1*2*3 f(n)! = n * f(n-1)!
  • 5. 5 10.2.2013 г. Видове рекурсия  Пряка рекурсия - в тялото на метод се извършва обръщение към същия метод.  Косвена рекурсия - Ако метод A се обръща към метод B, B към C, а С отново към А, казваме, че методът А, както и методите В и C са непряко (косвено) рекурсивни Пример (Непряка рекурсия):
  • 6. 6 10.2.2013 г. Реализация на числата на Фибоначи double fib(int n) { if (n <= 2) return 1; else return fib(n - 1) + fib(n - 2); } Пример за пряка рекурсия
  • 7. 7 10.2.2013 г. Дъно на рекурсията Трябва да имаме поне един случай, чието решение можем да намерим директно, без рекурсивно извикване. Тези случаи наричаме дъно на рекурсията. Пример с числата на Фибоначи: if (n <= 2) Дъно return 1;
  • 8. 8 10.2.2013 г. Рекурсия vs. Итерация
  • 9. 9 10.2.2013 г. Рекурсията :  По-четлива и елегантна от итеративното решение.  Консумира повече памет и ресурси.  Понякога можем да постигнем по-просто решение от итеративното.  А понякога постигаме много по-сложно.
  • 10. 10 10.2.2013 г. Как да създадем рекурсивен метод ?  Разбиване на задачата на подзадачи  Подзадачите трябва да се стремят да стигнат дъното на рекурсията.  Комбинирането на решенията на подзадачите да получава решението на цялата задача.
  • 11. 11 10.2.2013 г. Примерна реализация на n!  Намиране на рекурентна зависимост: 0! = 1 1! = 1*1*0! = 1 2! = 2*1 = 2*1! 3! = 3*2*1 = 3*2! 4! = 4*3*2*1 = 4*3! 5! = 5*4*3*2*1 = 5*4! n = n*(n-1)!  Реализация - Дъно – при n = 0
  • 12. 12 10.2.2013 г. Реализация на C++ double factorial(int n) { // Дъно на рекурсията if (n == 0) return 1; // Рекурсивно извикване: Методът извиква себе си else return n * factorial(n - 1); }
  • 13. 13 10.2.2013 г. Числата на Фибоначи – неефективна реализация Имаме много повтарящи се изчисления.
  • 14. 14 10.2.2013 г. Изводи:  Избягвайте рекурсията ако не сте сигурни как работи.  Винаги търсете и итеративни решения, за да имате база за сравнение.  Ако постигаме по-просто, кратко и по-лесно за разбиране решение, като това не е за сметка на ефективността и не предизвиква други странични ефекти, тогава можем да предпочетем рекурсията.
  • 15. 15 10.2.2013 г. Изготвил: Георги Мирчев Фак. Номер: 0901261023