Seite 1 von 1

LiveCoding -> Korrektheit iterativ -> fibonacci

Verfasst: 5. Mai 2017 11:21
von Robin Ferrari
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

Re: LiveCoding -> Korrektheit iterativ -> fibonacci

Verfasst: 5. Mai 2017 13:06
von Prof. Karsten Weihe
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

Re: LiveCoding -> Korrektheit iterativ -> fibonacci

Verfasst: 5. Mai 2017 13:12
von Robin Ferrari
ah ja :oops:

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

Lg
Robin

Re: LiveCoding -> Korrektheit iterativ -> fibonacci

Verfasst: 5. Mai 2017 13:17
von Prof. Karsten Weihe
Robin Ferrari hat geschrieben: gibt es einen Grund, dass wir einen long anstelle von einem int (oder byte) verwenden?
Nein, ein Versehen meinerseits.

KW