Ackermann Funktion Rekursion
-
Hallo !
Irgendwie funktioniert folgender Codeteil nicht richtig:
int computeAckermann(int a, int b, int c) { if(c == 0) return b++; else if(b == 0) return auxFunction(a, c-1); else { computeAckermann(a, computeAckermann(a, b-1, c), c-1); } } int auxFunction(int x, int y) { if(y == 0) return x; else if(y == 1) return 0; else if(y > 1) return 1; }
Bekomme als Ergebnis immer die gleiche Zahl 134515740 was nicht stimmen kann !
Was hab ich hier übersehen ?!
mfg und danke !
-
So, der Fehler lag leider im Detail:
int computeAckermann(int a, int b, int c) { if(c == 0) return ++b; // --> vorher inkrementieren dann return else if(b == 0) return auxFunction(a, c-1); else { return computeAckermann(a, computeAckermann(a, b-1, c), c-1); // --> hier braucht es ein return was ich aber nicht ganz verstehe } }
-
int computeAckermann(int a, int b, int c) { if(c == 0) return ++b; // --> vorher inkrementieren dann return else if(b == 0) return auxFunction(a, c-1); else { return computeAckermann(a, computeAckermann(a, b-1, c), c-1); // --> hier braucht es ein return was ich aber nicht ganz verstehe } }
leon22 schrieb:
return computeAckermann(a, computeAckermann(a, b-1, c), c-1);
// --> hier braucht es ein return was ich aber nicht ganz versteheGeh einfach mal die Anweisungen genau durch.
Mal angenommen, du rufst die Funktion mit Werten auf, sodass du durch die if und else if durchrutschst, dann landest du im letzten else-Zweig und das war's dann. Ohne return würde zwar noch weitergerechnet werden, aber du bekommst keinen Wert zurück, oder?!
-
Der Compiler sollte dir da auch eine Warnung geben, dass die Funktion in dem else Zweig keinen Wert returned.