Projekt: Rekurze a Fibonacci
Leden 2026
Tento úkol byl zaměřený na rekurzi. Zadání bylo vygenerovat Fibonacciho posloupnost dvěma způsoby: iterativně (fibs) a rekurzivně (fibsRec).
O co v projektu jde
Cílem bylo porovnat dva přístupy k řešení stejného problému a pochopit rozdíl v čitelnosti i výkonu.
- Úkol A: Napsat funkci
fibs(n), která vrátí pole čísel pomocí smyčky. - Úkol B: Napsat funkci
fibsRec(n), která udělá to samé, ale bez smyček – pouze voláním sebe sama.
Iterativní řešení (Smyčka)
První část byla přímočará. Vytvořit pole [0, 1] a ve smyčce přičítat poslední dvě čísla. Je to rychlé, efektivní a logické ($O(n)$).
function fibs(n) {
if (n <= 0) return [];
if (n === 1) return [0];
let arr = [0, 1];
for (let i = 2; i < n; i++) {
arr.push(arr[i - 1] + arr[i - 2]);
}
return arr;
}
Rekurzivní řešení
U rekurze bylo klíčové správně definovat base case a postupný návrat ze zásobníku volání.
function fibsRec(n) {
console.log("This was printed recursively");
// 1. Base Case - kdy se rekurze zastaví
if (n <= 0) return [];
if (n === 1) return [0];
if (n === 2) return [0, 1];
// 2. Rekurzivní krok - volám sám sebe pro menší počet
const arr = fibsRec(n - 1);
// 3. Výpočet až po návratu z hloubky
arr.push(arr[arr.length - 1] + arr[arr.length - 2]);
return arr;
}
Co bylo nejtěžší
- Správné nastavení base case, aby rekurze vždy skončila.
- Pochopení, že výpočet pokračuje až při návratu z hlubších volání.
- Ladění situací, kdy hrozí
Maximum call stack size exceeded.
Co jsem se naučil
- Kdy je vhodnější iterace a kdy rekurze.
- Jak funguje call stack v praxi.
- Jak psát rekurzivní funkce tak, aby byly čitelné a bezpečné.
GitHub: projekt fibonacci