Endrekursion
Eine alternative Funktionsdefiniton
Die Funktion anzahlBegruessungen
wird hier mit einer rekursiven Hilfsfunktion anzahlBegruessungenMitAkku
definiert.
anzahlBegruessungenMitAkku: Int -> Int -> Int
anzahlBegruessungenMitAkku anzahlPersonen akku =
if anzahlPersonen == 1 then
akku
else
anzahlBegruessungenMitAkku (anzahlPersonen-1) (akku + (anzahlPersonen-1))
anzahlBegruessungen: Int -> Int
anzahlBegruessungen anzahlPersonen =
anzahlBegruessungenMitAkku anzahlPersonen 0
Die Auswertung eines Funktionsaufrufs verläuft hier so:
anzahlBegruessungen 6 -> anzahlBegruessungenMitAkku 6 0 -> anzahlBegruessungenMitAkku 5 5 -> anzahlBegruessungenMitAkku 4 9 -> anzahlBegruessungenMitAkku 3 12 -> anzahlBegruessungenMitAkku 2 14 -> anzahlBegruessungenMitAkku 1 15 -> 15 15 15 15 15 15 15
Aufgabe 1
- Erkläre die Berechnungsschritte.
-
Erläutere die Rolle des Parameters
akku
. - Erläutere den Unterschied zur Berechnung im letzten Abschnitt. Kläre hierzu folgende Frage: Wann steht das Ergebnis der Berechnung fest?
Aufgabe 2
Teste die oben gezeigten Funktionsdefinitionen mit immer größeren Zahlen. Was fällt auf?
> anzahlBegruessungen 10
45 : number
> anzahlBegruessungen 100
4950 : number
> anzahlBegruessungen 1000
499500 : number
> anzahlBegruessungen 10000
49995000 : number
> anzahlBegruessungen 100000
...