Staartrecursie/recursie

Moderators: jkien, Xilvo

Reageer
Berichten: 3

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
Lorentziaan
Berichten: 5.079

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

Berichten: 3

Re: Staartrecursie/recursie

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

Reageer