Java:
public class Hofstadter
{
public int q (int n)
{
return (n < 3) ? 1: q(n - q (n - 1)) + q (n - q (n - 2));
}
}
import java.util.HashMap;
public class HofstadterCache extends Hofstadter
{
private static final HashMap<Integer, Integer> cache = new HashMap<>();
public int q(int n)
{
Integer result = cache.get(n);
if (result == null)
{
result = super.q(n);
cache.put(n, result);
}
return result;
}
public static void main(String[] args)
{
HofstadterCache h = new HofstadterCache();
System.out.println(h.q(10000000));
}
}
ich soll das zehnmillionste Folgenglied der Hofstadterfolge berechnen.
Da aber durch die Rekursion sich der Stack zu schnell auffüllt, sollte ich einen Cache implementieren, um sich vorherige Ergebnisse zu merken. Allerdings klappt das ganze trotzdem irgendwie nicht und ich bekomme einen StackOverflowError, obwohl ich das genauso mache wie es in meinem Buch beschrieben ist.
Könnte jemand erklären, was da los ist?
Danke und viele Grüße