Avatar billede lifehacker Nybegynder
27. august 2008 - 13:45 Der er 5 kommentarer

Uendelig rekursion

Jeg kan ikke se hvad denne rekursion returnere, nogle forslag??
(det er en uendelig rekursion)

[code]

#include <iostream>
using namespace std;

void recurse(int count) {
cout << count << endl; //printer tal
recurse (count + 1); //der bliver lagt 1 til tallet som printes
}

int main () {

recurse(1); //starter i 1...
}


[/code]


Dvs koden fungere på følgende måde: main() kalder recurse(1); men hvilken værdi returnere denne funktion? Jeg kan bare se i compileren at den starter i 1, and thats it. Bliver 1 send til void recurse(int count) ??
hjælp påskønnes!!
Avatar billede arne_v Ekspert
27. august 2008 - 13:47 #1
Den er void så den returnerer ikke nogen værdi.

Og derudover laver den altså uendelig rekursion så du dør med et stack overflow.
Avatar billede pidgeot Nybegynder
27. august 2008 - 13:51 #2
...eller ender i en uendelig løkke hvis din compiler laver tail call optimering.

*går igen*
Avatar billede erikjacobsen Ekspert
27. august 2008 - 16:15 #3
Groft sagt skal en rekursiv metode altid starte med en "if", der afgør om den er færdig eller skal fortsætte.

I dit tilfælde skal du måske tælle til 100, så

    if (count>100) {
      return;
    } else {
      ... det du har nu
    }
Avatar billede lifehacker Nybegynder
27. august 2008 - 16:54 #4
Er nu lidt forvirret.... Kan nogen hjælpe? Jeg er kommet frem til denne løsning:

1. #include <iostream>
2. using namespace std; 
3.
4. void Recurse(int counter) {
5.
6. if (counter>10) {
7.      return;
8.    }
9.
10.
11.      else {
12.
13. cout << counter << endl;
14. Recurse(counter + 1);
15.
16.        }
17.        }
18.
19. int main () {
20.
21. Recurse(1);
22.
23.
24. }


1.) i linie 19 vil main() kalde Recurse(int counter) men hvad sker der her efter?? Går man direkte i if-else sætningen?
2.) i linie 13 printes counter

jeg kan ikke se sammenhængen mellem if og else sætningen.  I if-sætningen siger den at counter skal være > 10 og alt under 10 sendes til else-sætningen hvor der bliver lagt 1 til og dermed printes en ny iteration. Alt det som er større end 10, hvor sendes det?? altså return til hvor?
Avatar billede erikjacobsen Ekspert
27. august 2008 - 22:27 #5
Den returnerer blot til det hvor den bliver kaldt. Din kode er helt identisk med:

void Recurse(int counter) {
  if (counter<=10) {
    cout << counter << endl;
    Recurse(counter + 1);

  }
}
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