Betrachte die folgende Summenfunktion:
-- ------ nicht optimale Lösung ----------
summe 0 = 0
summe n = n + summe (n-1)
-- ---------------------------------------
Eine (teilweise verkürzte) Auswertung des Aufrufes "summe 3" ergibt:
summe 3
--> 3 + summe 2
--> 3 + 2 + summe 1
--> 3 + 2 + 1 + summe 0
--> 3 + 2 + 1 + 0
--> 3 + 2 + 1
--> 3 + 3
--> 6
Man erkennt, dass sich der Term zunächst stark aufbläht, bevor er durch die Abbruchbedingung wieder zusammenschrumpft. Ursache dieses Verhaltens ist die Tatsache, dass der letzte Befehl der Funktion summe eine Addition ist.
Wenn es gelingt, eine Funktion so umzuschreiben, dass der rekursive Selbstaufruf die letzte Aktion darstellt, dann spricht man von einer endrekursiven Funktion.
Hierzu benötigt man einen Akkumulator (eine weitere Variable), der die Zwischenergebnisse festhält und beim Erreichen der Abbruchbedingung das Endergebnis sofort liefert. Dadurch entfällt das "Zurücklaufen". Zu beachten ist dabei, dass der Akkumulator mit den richtigen Startwerten initialisiert wird.
-- ---------- Akkumulatorlösung ----------
summe 0 x = x
summe n x = summe (n-1) (x+n)
-- ---------------------------------------
Aufruf der Funktion mit n=3:
summe 3 0 -- Akkumulator mit 0 vorbelegen
--> summe 2 (3)
--> summe 1 (5)
--> summe 0 (6)
--> 6