Avatar billede krogstrup Nybegynder
12. november 2004 - 22:43 Der er 6 kommentarer og
1 løsning

Er gået 100% kold på simpel simpel rekursiv funktion

Jeg fatter ikke en bønne - har lavet masser af rekursive funktioner tidligere uden problemer, men kan simpelt hen ikke gennemskue hvad jeg gør galt i denne. Her er koden:


function displaySitemap(arrStructure,intParentid,intIndent)

    if isarray(arrStructure) then
   
        for x = 1 to intIndent
            strIndent = strIndent & "   "
        next
       
        for n = 0 to ubound(arrStructure,2)
       
            if int(intParentid) = int(arrStructure(2,n)) then

                strOutput = strOutput & n & " - "
                strOutput = strOutput & strIndent & arrStructure(3,n) & "(parentID: " & intParentid & " - ID: " & arrStructure(0,n) & ")" & vbCrlf
                strOutput = strOutput & displaySitemap(arrStructure,arrStructure(0,n),intIndent + 1)
                strOutput = strOutput & " - " & n & "<br>"

            end if
       
        next
   
    end if
   
    displaySitemap = strOutput

end function




I denne linie:

strOutput = strOutput & displaySitemap(arrStructure,arrStructure(0,n),intIndent + 1)

kalder jeg funktionen inden i funktionen (altså mit rekursive kald)

Dette fungerer tilsyneladende også fint nok. MEN når dette kald er færdigt og der returneres til det oprindelige loop er min variabel n blevet ændret.

Dvs. at værdien af n fra mit rekursive funktionskald nu bliver brugt videre i mit første funktionskald.

Dette gør selvfølgelig at min funktion fejler. Variablen n (som jeg har lavet 2 gange response.write på) skulle jo gerne indeholde samme tal både før og efter det rekursive kald.

HVORFOR bliver n ændret ?

Hvordan kan det rekursive kald påvirke variabler i det oprindelige funktionskald ?!?

Håber MEGET at een af jer derude kan se hvad mine øjne efter 4 timer har stirret sig blinde på....
Avatar billede krogstrup Nybegynder
12. november 2004 - 23:26 #1
har nu fundet ud af at hvis jeg opretter en ny blank side, hvor jeg KUN indsætter ovenstående funktion og så kalder den, ja så vises min sitemap korrekt ?!?

Hvad kan det være af kode i mit site der får min rekursive funktion til at opføre sig således at værdien af n føres med tilbage når et rekursivt kald er færdigt ?
Avatar billede krogstrup Nybegynder
12. november 2004 - 23:36 #2
aaaaaaaaah - så tror jeg at fejlen er fundet !!!!

Jeg prøvede at fjerne menuen fra mit site. Denne er IKKE lavet fra et funktionskald men blot skrevet som et loop direkte i design koden. I dette loop bruger jeg også variablen n som counter. Dvs. at variablen n er blevet erklæret globalt for mit asp dokument.

Jeg går ud fra at det er dette som ændrer adfærdsmønster for hvorledes værdier at variabler i funktioner håndteres.

Kunne nogen be- eller afkræfte dette ?
Avatar billede erikjacobsen Ekspert
12. november 2004 - 23:47 #3
Du bør sige

  dim n

øverst i din funktion. Og tilsvarende for de andre variabler du bruger
Avatar billede krogstrup Nybegynder
12. november 2004 - 23:53 #4
Du har fuldstændig ret !

Endda af 2 årsager

1) Det blivere nemmere at fejlsøge når alle variabler er deklareret
2) Det løser jo mit aktuelle problem. Når n er deklareret i min funktion påvirkes den ikke længere af at min menu på siden også benytter sig af en variabel kaldet n

Har altid godt kendt til punkt 1, men har vist været for doven til at gøre noget ved det :-)

Måske man skulle tage sig sammen....
Avatar billede krogstrup Nybegynder
12. november 2004 - 23:54 #5
Anyways - tak for dit korte men meget behjælpelige input !!!!

Smider du et svar ?
Avatar billede erikjacobsen Ekspert
13. november 2004 - 00:12 #6
Nej tak, jeg samler slet ikke på point.
Avatar billede krogstrup Nybegynder
13. november 2004 - 00:24 #7
ok - men mange tak for hjælpen !

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