Springen naar inhoud

Staartrecursie/recursie


  • Log in om te kunnen reageren

#1

Kareltje

    Kareltje


  • 0 - 25 berichten
  • 3 berichten
  • Gebruiker

Geplaatst op 02 september 2009 - 15:03

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))))

Veranderd door Kareltje, 02 september 2009 - 15:04


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

qrnlk

    qrnlk


  • >5k berichten
  • 5079 berichten
  • Lorentziaan

Geplaatst op 02 september 2009 - 16:33

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

#3

Kareltje

    Kareltje


  • 0 - 25 berichten
  • 3 berichten
  • Gebruiker

Geplaatst op 02 september 2009 - 19:26

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





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures