Kareltje
Artikelen: 0
Berichten: 3
Lid geworden op: wo 18 mar 2009, 19:52

Staartrecursie/recursie

Ik weet dat staartrecursie betekent dat de recursieve oproep de laatste instructie moet zijn in de body van een procedure, om over staartrecursie te mogen spreken.

Maar nu is mijn vraag, of onderstaand stukje code dan ook staartrecursief is ... Want in feite is de "cons"-functie de laatste instructie in je body (aleh denk ik toch). Als je de waarde van de recursieve oproep gedaan hebt, moet je daarna nog eens consen.

Dus: Gewoon recursief of staartrecursief?

(De code is maar een simplistisch zelfgekozen voorbeeld in Scheme :eusa_whistle: )

(define (lalalala expressions omgeving)

(if (null? lalala)

'()

(cons (functieaanroep argumenten)(lalalala expressions2 omgeving))))
Gebruikersavatar
qrnlk
Lorentziaan
Artikelen: 0
Berichten: 5.079
Lid geworden op: vr 14 jul 2006, 14:35

Re: Staartrecursie/recursie

De cons wordt als laatste uitgevoerd, dit betekend dat de runtime omgeving deze cons op de stack moet bijhouden en daarom is dit gewone recursief, niet staart-recursief.

Waar het om gaat is dat de laatste functieaanroep letterlijke een GOTO is indien het de functie staart-recursief is en dus veel goedkoper (0 geheugen, minimale tijd) dan een hele functieaanroep.
Any sufficiently analyzed magic is indistinguishable from science.

Any sufficiently advanced technology is indistinguishable from magic.



There is no theory of protecting content other than keeping secrets – Steve Jobs
Kareltje
Artikelen: 0
Berichten: 3
Lid geworden op: wo 18 mar 2009, 19:52

Re: Staartrecursie/recursie

Zoals ik al dacht dus. Bedankt voor de uitleg, qrnlk :eusa_whistle:

Terug naar “Informatica en programmeren”