Rekursion

Tags:    c++

Er lidt i tvivl mht en rekursions opgave:

Fold kodeboks ind/udKode 


Jeg er i tvivl om forløbet af koden. Hvor begynder funktionen med at kalde og hvor ender den hen?






Indlæg senest redigeret d. 19.08.2008 15:42 af Bruger #13344
Uden at være C++ ekspert, så vil jeg påstå at den der aldrig ender - det er de rekursive funktioners svar på en uendelig løkke :)

Mvh.

Kasper (TSW)



Uden at være C++ ekspert, så vil jeg påstå at den der aldrig ender - det er de rekursive funktioners svar på en uendelig løkke :)


Jep, den ender aldrig, men det er ikke helt en uendelig løkke, for på et tidspunkt løber du tør for plads på stakken, og så går programmet ned.

Prøv følgende i stedet:

Fold kodeboks ind/udKode 


Den skriver tallene fra 1-50 vha. rekursion. Læg mærke til, at recurse() funktionen kun kalder sig selv, hvis den nuværende værdi er mindre end den maksimale værdi.



Ja, som Kasper siger ender din kode aldrig. Du skal have noget kode som bestemmer hvornår rekursionen skal slutte. Et eksempel kunne være dette

Fold kodeboks ind/udKode 


Kører du så count(5) vil dit output blive

5
4
3
2
1

Og rekursionen vil så slutte når count(0) bliver kaldt.



Indlæg senest redigeret d. 19.08.2008 16:30 af Bruger #3275
Jeg prøver at forstå dette lidt bedre, og har derfor lagt nogle kommentarer ind for at skære det helt ud i pap.
Hvis jeg har forklaret forkert ville jeg påskønne om i kunne rette det:
Fold kodeboks ind/udKode 





Kender det kun fra java, og har ikke brugt det i praksis, kun læste om det, men jeg er ret sikker på, at du har fat i det rigtige. Læste om det her: http://javabog.dk/VP/kapitel3.jsp og syntes det beskriver det ret godt. Den giver også et godt eksempel på hvordan man kan bruge det ivirkelighede ;D



En simpel regel må være: Rekursions funktioner skal altid indeholde mindste en betingelse der søger for løkken ender. <------ Correct me if I'm wrong.

Mit lille program der illustrerer dette....

Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 23.08.2008 09:41 af Bruger #14086
En simpel regel må være: Rekursions funktioner skal altid indeholde mindste en betingelse der søger for løkken ender. <------ Correct me if I'm wrong.


Du har ret, men rekursion er IKKE en løkke. Rekursion er rekursion, og rekursion er aldrig uendelig. Den slutter bare meget grumt med en stack overflow, medmindre man selv terminerer den, det behøver en løkke ikke.



t