Opakovanie samého seba.
Poznáme rekurzívne algoritmy, ale aj rekurzívne dátové typy
Keď siete tvoria ďalšie siete
Dátový typ, ktorý obsahuje sám seba.
struct linked_list {
int value;
struct linked_list* next;
}
Členom štruktúry je smerník na rovnakú ďalšiu štruktúru.
Postup, ktorý volá sám seba.
https://sk.wikipedia.org/wiki/Fibonacciho_postupnos%C5%A5
int fibonacci(int n){
if (n == 0){
return 0;
}
else if (n == 1){
return 1;
}
// A co dalej ???
//
}
int fibonacci(int n){
// Ukocovacia podmienka
if (n == 0){
return 0;
}
else if (n == 1){
return 1;
}
// Rekurzivne volanie
return fibonacci(n-1) + fibonacci(n-2);
}
Rozdeľ problém na menšie časti tak, aby každá bola menšou verziou pôvodného problému. Ak je problém dostatočne malý, riešenie je triviálne. Pospájaj čiastkové riešenia.
[ntroduction to Algorithms]
Divide the problem into a number of subproblems that are smaller instances of the same problem. Conquer the subproblems by solving them recursively. If the subproblem sizes are small enough, however, just solve the subproblems in a straightforward manner. Combine the solutions to the subproblems into the solution for the original problem.
Rekurzia sa často využíva pri triedení.
Netreba robiť nič.
Vymeň dva prvky.
Daj na prvé miesto najmenší prvok.
Zotrieď zvyšný (menší) zoznam .
Je založený na dátovej štruktúre "kopa".
Na budúce.
\(O(n^2)\)
Zložitosť vloženia prvku do poľa môže byť veľká
Je potrebné nové pole na uloženie výsledku?
\(O(1)\) alebo \(O(n)\)