Portfolio
Projekt: Rekurze a Fibonacci

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