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;
}
Robin