Rekursive Ackermann-Funktion erzeugt Stack-Overflow



  • Hallo zusammen,
    ich habe in meiner Informatikübung in Java die Ackermannfunktion rekursiv implementiert und verschiedene Test gemacht. Bei ack(4, 1) kommt allerdings nach < 1s ein Stack-Overflow. Kann ich da irgendwelche Parameter mitgeben, damit er länger durchhält? Benutze das normale JDK 1.4.2 über die Kommandozeile.

    Edit: Das hier ist der Code:

    public static int ack(int x, int y) 
    	{
    		if(x == 0) return y + 1;
    		else if(x > 0 && y == 0) return ack(x - 1, 1);
    		else return ack(x - 1, ack(x, y - 1));
    	}
    

    Gruß,

    Mastah



  • clisp produziert ungefähr nach 2 min. einen Overflow, vielleicht ist das normal? 😉



  • Ja, aber warum stellen die uns dann so ne blöde Aufgabe. Es hieß in etwa: "Prüfen sie, für welche x \in {1,2,3,4} und für welche y < 100 die Funktion in weniger als ~10 sec einen Wert liefert." Das tolle ist aber, dass für ack(1, 100) und ack(2,100) das Ding in Nullkommanix durchläuft. Aber bei ack(3,10) und ack(4,0) produziert das Ding nen Stack-Overflow. Mir ist klar, dass auch ein ungeheurer Rechen-/Speicheraufwand dahinter steckt wenn x größer wird, aber man muss doch der VM irgendwie sagen können "Hey VM, du hast jetzt einen Riesenstack"...

    Habs so probiert:

    java -ss50m -oss50m Ackermann
    

    Das schien ihn aber völlig kalt zu lassen. Hat niemand eine Idee? *wein* 😉



  • OK also in C läuft das Ding hier in 2min durch, muss doch an Java liegen.



  • Hab grad meinen Tutor gefragt. Der meint es läuft unter Linux auch durch. Muss wohl an der Windows-Implementation der VM liegen...



  • Naja, die Java-Version hat sich bei mir unter Linux nach 5 1/2 min verabschiedet...



  • Immerhin 😉 .


Anmelden zum Antworten