14. maj 2002 - 09:42Der er
4 kommentarer og 3 løsninger
rekursiv metode
Er der performance i at lave en metode rekursiv? Umiddelbart kan jeg ikke se at den skal være hutigere. Set ud fra brug af maskin ressourcer, er det så bedre ? Kan en her lige give svar på dette? QD::
Rekursive metoder er lette at lave, men er meget langsomme i forehold til at de altid kan laves via løkker. Derudover kan rekursiv metoder bruge enorme mængder stak, hvis det skulle være en større opgave de skal løse.
Som sagt i klassen, så mener jeg at fordelen ved en rekursiv metode viser sig når den laver noget både på vejen frem og når den backtracker. fx hvis det rekursive kald sker inde i en løkke. Eller flere rekursive kald efter hinanden.
Der er forskellige former for rekursion og deres performance er vidt forskellig. De simpleste eksempler få rekursion såsom fakultetsfunktionen n!=n*(n-1)! er ret håbløse mht performance og ligeledes med Fibonacci tal F(n)=F(n-1)+F(n-2) de kan virkelig svine med hukommelsen. Men der er andre tilfælde hvor rekursion er meget effektivt, det er f.eks. tilfældet hvor man opbygger matematiske udtryk i træform til evaluering, differentiering etc. Her er rekursion simpel der skal ikke mange kald til og det er uhyre effektivt. Kun når rekursion leder til et meget stort antal metode kald har du problemer.
chries: Du er ude på dybt vand med din generele holdning til at rekursive metoder er langsomme.
Du har ret i de bruger meget stak, men det er bestemt ikke altid langsomme tværtimod. Som Carsten siger er det meget gode til brug ved træstrukturer osv.
quaid: Kort summeret. Til visse ting er rekursive metoder særdeles anvendeligt, de kan dog bruge meget stack plads, og kan være langsommere end brug af løkker.
Om du skal bruge det ene eller det andet er et valg ud fra opgaven.
Skulle jeg f.eks. lave en metode der beregner fibonacci's tal ville jeg aldrig bruge rekursive metoder, men skulle jeg lave en metode der løber i gennem en træ struktur, er den rekursive løsning tæt på perfekt.
Det man altid skal passe på er at man ikke lander i et uendeligt kald af sig selv, får så crasher maskinen med sikkerhed.
Mange tak for jeres bidrag. Jeg er godt klar over hvor det er på sin plads at bruge rekursion. Det jeg var interesseret i, var dens performance. QD::
Synes godt om
Ny brugerNybegynder
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.