Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Sirpi
    senior tag

    Ilyesmire gondolsz, hogy például oldjam meg a Fibonacci-t rekurzióval és ciklussal is: ?

    public class Fibonacci{

    public static void main(String[] args) {
    System.out.println(fibonacciRecursion(3));
    System.out.println(fibonacciLoop(3));

    }

    public static int fibonacciRecursion(int n) {
    if (n <= 1)
    return n;
    return fibonacciRecursion(n - 1) + fibonacciRecursion(n - 2);
    }

    public static int fibonacciLoop(int n) {
    int[] arr = new int[n + 1];
    for (int i = 0; i < arr.length; i++) {
    if (i <= 1)
    arr[i] = i;
    else
    arr[i] = arr[i - 1] + arr[i - 2];
    }
    return arr[n];
    }
    }

    Én mind a két implementációt optimalizálnám.

    Az elsőnél az a gond, hogy így baromi lassú, F(n)-t pont F(n) időben fogja kiszámolni, tehát lineáris helyett exponenciális lesz a futásidő. Ezen a már kiszámolt értékek eltárolásával lehet segíteni. Próbáld nagyobb értékkel futtatni, azt hiszem, az int-be 44-ig nem csordul túl, de ha átírod long-ra, akkor 89-ig próbálkozhatsz, azt pedig már lehetetlen kivárni.

    A másodiknál pedig felesleges lefoglalni egy teljes tömböt, elég tudni mindig a két utolsó értéket:

    if (n <= 1)
    return n;
    int a = 0;
    int b = 1;
    for (int i = 2; i <= n; i++) {
      int c = a + b;
      a = b;
      b = c;
    }
    return b;

Új hozzászólás Aktív témák