Avatar billede soenderup Nybegynder
28. juni 2002 - 12:16 Der er 5 kommentarer

Stack error ved rekursiv funktion

Hvorfor kan dette ikke lade sig gøre?
Hvis 1000 ændres til 100 kører den fint nok, så der er ikke tale om en uendelig løkke:

<%@ Language=VBScript %>
<%
Dim tmp
Function Recursiv(value)
    tmp = tmp & value & "<br>"
    If value < 1000 Then
        Recursiv(value+1)
    End If
    Recursiv = tmp
End Function



Response.write Recursiv(1)
%>

Bemærk ovenstående er et eksempel!

/Sønderup
Avatar billede tmceu Praktikant
28. juni 2002 - 12:31 #1
Du ender jo med at få en string værdi in, når du ligger "<BR>" til dit tal?
Avatar billede tmceu Praktikant
28. juni 2002 - 12:32 #2
Sorry, bare glem den kommentar :-)

Men hvorfor ligger du 1 til, bør den ikke tælle ned ?
Avatar billede jespernaur Nybegynder
28. juni 2002 - 12:34 #3
Det er et spørgsmål om, hvor meget stakplads din webserver stiller
til rådighed for at udføre ASP. Jeg er ikke klar over, om dette er noget
man kan stille på.

Hvert niveau af rekursion bruger
en vis mængde stak, afhængig af antallet af parametre og antallet
af lokale variable i den rekursive sub. En rekursions-dybde på
1000 er faktisk MEGET, og hvis dit problem giver anledning til
at du har behov for det, bør du overveje en anden løsningsmetode.

Mvh
Jesper Naur
Avatar billede kichian Nybegynder
28. juni 2002 - 12:42 #4
Det kan ikke lade sig gøre fordi, der kun er reserveret en vis mængde plads på "stakken" til hver process.
Rekursive funktioner er gode til at afspejle løsningen på en problemstilling, men er sjældent hurtige. Derfor vil man typisk vælge at implementere dem vha. en løkke konstriktion.

Dit eksempel er iøvrigt let at skrive om, da du gemme mellemresultatet i en global variabel, hvilket vel er lidt atypisk for en rekursiv funktion.
Avatar billede kalkunen Nybegynder
28. juni 2002 - 14:48 #5
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester