Sobes.tech
Junior — Middle

Hogyan lehet optimalizálni a rekurzív hívásokat a hatékonyság növelése érdekében?

sobes.tech MI

Válasz az MI-től

A rekurzív hívások optimalizálására gyakran alkalmazott módszerek a következők:

  1. Memorizáció — az már kiszámított hívások eredményeinek tárolása, hogy elkerüljük az ismételt számításokat. Különösen hasznos problémák esetén, ahol átfedő alproblémák vannak, például a Fibonacci-számok számítása során.

  2. Végrehajtási rekurszió (Tail-recursion) — ha a rekurzív hívás a függvény utolsó művelete, a fordító optimalizálhatja a hívást, átalakítva ciklussá, így csökkentve a verem memóriahasználatát.

  3. Rekurzió átalakítása iterációvá — néha egy rekurzív algoritmust ciklussá lehet írni, ami teljesen kiküszöböli a függvényhívásokkal járó többletköltségeket.

Példa a Fibonacci-számok számítására C++-ban memorizációval:

#include <unordered_map>

std::unordered_map<int, long long> memo;

long long fib(int n) {
    if (n <= 1) return n;
    if (memo.count(n)) return memo[n];
    return memo[n] = fib(n - 1) + fib(n - 2);
}

Ez a megközelítés jelentősen gyorsítja a számításokat a naiv rekurzióhoz képest.