Avatar billede quaid Nybegynder
14. maj 2002 - 09:42 Der 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::
Avatar billede chries Nybegynder
14. maj 2002 - 09:45 #1
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.
Avatar billede codemon Nybegynder
14. maj 2002 - 10:04 #2
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.
Avatar billede carstenknudsen Nybegynder
14. maj 2002 - 10:08 #3
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.
Avatar billede disky Nybegynder
14. maj 2002 - 10:31 #4
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.
Avatar billede chries Nybegynder
14. maj 2002 - 10:41 #5
disky du kan jo vise mig en rekursiv metode der er hurtigere end en løkke !
Avatar billede disky Nybegynder
14. maj 2002 - 12:05 #6
chries:
Hvis du har fulgt lidt med i TOP's timer, ved du godt at de findes ikke, jeg har heller ikke sagt at de er hurtigere. :-)

Carsten og jeg har sagt at de til visse ting er uhyre effektive, og giver meget mere overskueligt kode, end ikke rekursive ting.

Men selvfølgelig er de langsommere pga metode kald.

p.s. Du er jo i den helt forkerte gruppe, hop over til C++ igen :-))

Til dem der nu undrer sig, vi har studeret sammen.
Avatar billede quaid Nybegynder
14. maj 2002 - 13:24 #7
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::
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