LiveCoding -> Korrektheit iterativ -> fibonacci

Robin Ferrari
Erstie
Erstie
Beiträge: 15
Registriert: 15. Apr 2016 10:16

LiveCoding -> Korrektheit iterativ -> fibonacci

Beitrag von Robin Ferrari » 5. Mai 2017 11:21

Guten Tag

Mir ist aufgefallen, dass fibonacci(long n) einen long als Parameter nimmt. Damit würde fibonacci() für n > (2^31 - 1) nicht mehr terminieren.

Grund ist die Abbruchbedingung in der for Schleife: int wird immer kleiner bleiben als (2^31 - 1).

Code: Alles auswählen

public static long fibonacci ( long n ) {

    if ( n == 0 || n == 1 )
        return n;

    long fib_of_i = 1;
    long fib_of_i_minus_1 = 1;
    long fib_of_i_minus_2  = 0;

    for ( int i = 2; i <= n; i++ ) {
        fib_of_i = fib_of_i_minus_1 + fib_of_i_minus_2;
        fib_of_i_minus_2 = fib_of_i_minus_1;
        fib_of_i_minus_1 = fib_of_i;
    }

    return fib_of_i;
}

LG
Robin

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: LiveCoding -> Korrektheit iterativ -> fibonacci

Beitrag von Prof. Karsten Weihe » 5. Mai 2017 13:06

Robin Ferrari hat geschrieben: Mir ist aufgefallen, dass fibonacci(long n) einen long als Parameter nimmt. Damit würde fibonacci() für n > (2^31 - 1) nicht mehr terminieren.
Vorbedingung war n <= 92.

KW

Robin Ferrari
Erstie
Erstie
Beiträge: 15
Registriert: 15. Apr 2016 10:16

Re: LiveCoding -> Korrektheit iterativ -> fibonacci

Beitrag von Robin Ferrari » 5. Mai 2017 13:12

ah ja :oops:

gibt es einen Grund, dass wir einen long anstelle von einem int (oder byte) verwenden?

Lg
Robin

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: LiveCoding -> Korrektheit iterativ -> fibonacci

Beitrag von Prof. Karsten Weihe » 5. Mai 2017 13:17

Robin Ferrari hat geschrieben: gibt es einen Grund, dass wir einen long anstelle von einem int (oder byte) verwenden?
Nein, ein Versehen meinerseits.

KW

Antworten

Zurück zu „Archiv“