Program wyznaczający liczby Fibonacciego - kilka pytań

0

Mam dany program obliczający liczby Fibonacciego. Ale nie rozumie dlaczego tablica jest powiekszona o 1 (new int [n+1]), oraz dlaczego tab[0] jest puste ? I dlaczego przy zwracaniu znowu tablica jest zmniejszana o -1.

 public class ASID_Lab3Zad3 {

    public static int Fibo(int n) {
        int tab[] = new int[n + 1];
        tab[1] = 1;
        tab[2] = 1;

        for (int i = 3; i < tab.length; i++) {
            tab[i] = tab[i - 1] + tab[i - 2];
        }

        return tab[tab.length - 1];
    }

    public static void main(String[] args) {
        final int n = 3;
        System.out.println(Fibo(n));
    }

}
1

To może zacznę od tego, że nie polecam pisać w ten sposób kodu, ale wydaje mi się (po kilkunastu minutach główkowania), że znam zamiary.
Zacznę od tablicy - numerują od 1 zamiast od zera najprawdopodobniej, żeby zachować wzór matematyczny zaczynający od indeksu 1 (nie wiem po co, ale nie będę się pastwił :) ). Czyli jak chcesz obliczyć 3 element ciągu to obliczasz indeksem 3, a nie 2. Z tego powodu trzeba (w tym wypadku - numerowania od 1) zrobić tablicę o 1 większą, bo dla tej przykładowej 3 ostatnią komórką tablicy byłaby komórka nr 2, więc nie mieściłby się wynik. Return nie zmniejsza tablicy tylko po prostu zwraca ostatni element tej tablicy, w którym jest wynik (w tablicy 4 elementowej będzie to element o indeksie 3).

0

Bo ktoś wolał zacząć od indeksu 1 zamiast 0. Przy czym to nie jest poprawne z punktu widzenia definicji, bo pierwszy wyraz ciągu to 0: https://pl.wikipedia.org/wiki/Ciąg_Fibonacciego

0

Tez tak myslalem, ale nie bylem tego pewny, bo moze mialo to jakis ukryty sens którego nie widzialem. Dlaczego nie polecacie pisac tak programu ?

0

właśnie z powodu późniejszego problemu z analizowaniem kodu (czytelność kodu)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.