Hi Leute,
meine Aufgabe ist es die n-te Zahl der Fibonacci-Folge rekursiv zu berechnen, wobei die Methode mittels eines Caches für jedes n höchstens einmal aufgerufen werden soll, sodass am Ende die Methode maximal n+1 mal aufgerufen wurde. Ich hab viel nachgedacht, viel rumprobiert, komme aber leider nicht unter 2n-3 Aufrufe. Ich wär Euch sehr dankbar, wenn Ihr mir helfen könntet meinen Denkfehler zu finden, bzw meine Gedanken in die richtige Richtung zu lenken:
Vielen Dank im Voraus!
meine Aufgabe ist es die n-te Zahl der Fibonacci-Folge rekursiv zu berechnen, wobei die Methode mittels eines Caches für jedes n höchstens einmal aufgerufen werden soll, sodass am Ende die Methode maximal n+1 mal aufgerufen wurde. Ich hab viel nachgedacht, viel rumprobiert, komme aber leider nicht unter 2n-3 Aufrufe. Ich wär Euch sehr dankbar, wenn Ihr mir helfen könntet meinen Denkfehler zu finden, bzw meine Gedanken in die richtige Richtung zu lenken:
Java:
public class FibonacciCache {
private static int aufrufe = 0;
private static int fib(int n, int[] cache) {
aufrufe++;
if(n <= 0){
return 0;
}
cache[0] = 1;
if(cache[n-1] != 0){
return cache[n-1];
}
if(cache [n-2] != 0){
int result = cache[n-2] + fib(n - 2, cache);
cache[n-1] = result;
return result;
}
else if(cache [n-3] != 0){
int result = fib(n-1, cache) + cache[n-3];
cache[n-1] = result;
return result;
}
else if(cache[n-2] != 0 && cache[n-3] != 0){
int result = cache[n-2] + cache[n-3];
cache[n-1] = result;
return result;
}
else{
int result = fib(n-1, cache) + fib(n - 2, cache);
cache[n-1] = result;
return result;
}
}
public static void main(String []args) {
int n = Integer.parseInt(args[0]);
int[] cache = new int[n];
System.out.println("fib(" + n + ") = " + fib(n, cache) + " (Aufrufe = " + aufrufe + ")");
//for(int i = 0; i < n; i++){
// System.out.println(cache[i]);
//}
}