Springen naar inhoud

Getallen van Fibonacci berekenen.


  • Log in om te kunnen reageren

#1

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 02 november 2008 - 15:42

Volgend programma zou de getallen van fabonacci moeten kunnen berekenen alleen zie ik niet goed hoe?
Geplaatste afbeelding

Men heeft twee variabelen temp1 en temp2 deze initialiseert men nooit toch telt men ze op een gegeven moment op hoe kan dat? Ziet er iemand hoe dit kan werken? Groeten.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 02 november 2008 - 15:45

Volgend programma zou de getallen van fabonacci moeten kunnen berekenen alleen zie ik niet goed hoe?

Weet je wat een referentie is?

#3

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 02 november 2008 - 15:58

Call by reference? ja dat ken ik, dit is dat je een referentie doorgeeft naar waar een andere functie de waarde mag schrijven.

Maar hier wordt zowel result als temp1 en temp2 niet geinitialiseerd?

#4

TD

    TD


  • >5k berichten
  • 24049 berichten
  • VIP

Geplaatst op 02 november 2008 - 16:26

Probeer eens door het programma te lopen met fib(1,result) (dus n = 1 in plaats van 4) en daarna met n=2. Lukt dat? Zie je dat het programma recursief werkt? Het roept zichzelf opnieuw op (voor n>1).
"Malgré moi, l'infini me tourmente." (Alfred de Musset)

#5

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 02 november 2008 - 17:03

Het programma roept zijn eigen idd recursief op. Toch zie ik niet hoe die twee variablen temp1 en temp2 werken.

#6

TD

    TD


  • >5k berichten
  • 24049 berichten
  • VIP

Geplaatst op 02 november 2008 - 17:06

Heb je eens geprobeerd er (in je hoofd) door te gaan voor n = 2? Dan worden temp1 en temp2 gebruikt, misschien zie je dan in hoe/waarom. Zoals je weet is fib(n) = fib(n-1)+fib(n-2) voor n>1, temp1 en temp2 worden precies gebruikt om je huidig getal te berekenen als som van de twee voorgaande.
"Malgré moi, l'infini me tourmente." (Alfred de Musset)

#7

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 02 november 2008 - 17:20

Ik heb het nog eens geprobeerd en zie nu dat men in result wegschrijft en zo ook in temp1 en analoog voor temp2.

Maar hoe wordt de globale parameter result dan bereikt? hellemaal op het laatste schrijft de functie in result maar dat is dan toch de parameter waarmee de functie word opgeroepen en niet degene die hellemaal bovenaan in de eerste lijn gedefinieerd is? Groeten.

#8

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 02 november 2008 - 17:28

Even terzijde: het programma is hopeloos complex geschreven. Ze hadden beter het volgende kunnen doen:

int fib(int n) {
   if (n < 2) {
	 return 1;
   }
   return (fib(n-1) + fib(n-2));
}

void main(void) {
  int result;
  result = fib(4);
}

Dan is het in ieder geval veel duidelijker wat er gebeurt.

Maar hoe wordt de globale parameter result dan bereikt?

Die wordt meegegeven als referentie in main.

#9

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 02 november 2008 - 17:29

Bedankt voor je code.
Maar hoe wordt in het oorspronkelijke de globale variable aangesproken?

#10

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 02 november 2008 - 17:45

Maar hoe wordt in het oorspronkelijke de globale variable aangesproken?

Die wordt meegegeven als referentie in main.

#11

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 02 november 2008 - 17:55

tuurlijk Bedankt.

#12

Cycloon

    Cycloon


  • >1k berichten
  • 4810 berichten
  • VIP

Geplaatst op 02 november 2008 - 18:12

Bedenk ook dat dit het schoolvoorbeeld bij uitstek is om aan te tonen dat recursie niet altijd efficiŽnt is.

#13

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 02 november 2008 - 22:13

Het wordt er trouwens ook niet duidelijker op doordat in deze code voor zowel het globale resultaat als voor het functie-argument een variabele "result" wordt gebruikt. Want die twee hebben niets met elkaar te maken.
In theory, there's no difference between theory and practice. In practice, there is.

#14

Vladimir Lenin

    Vladimir Lenin


  • >250 berichten
  • 829 berichten
  • Ervaren gebruiker

Geplaatst op 03 november 2008 - 21:58

Volgend programma zou de getallen van fabonacci moeten kunnen berekenen alleen zie ik niet goed hoe?
Geplaatste afbeelding

Men heeft twee variabelen temp1 en temp2 deze initialiseert men nooit toch telt men ze op een gegeven moment op hoe kan dat? Ziet er iemand hoe dit kan werken? Groeten.

Omdat in vele talen, een int standaard de waarde 0 krijgt.
"Als je niet leeft zoals je denkt, zul je snel gaan denken zoals je leeft."
--Vladimir Lenin-- (Владимир Ильич Ульянов)

#15

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 03 november 2008 - 22:30

Omdat in vele talen, een int standaard de waarde 0 krijgt.

Heeft er in dit geval niks mee te maken, aan die temp1 en temp2 wordt gewoon netjes een waarde toegekend (in het volgende recursieniveau) en daarna pas opgeteld.

Ze expliciet initiŽren (ongeacht met welke waarde) zou zelfs tot een compiler warning "variable is assigned a value that is never used" ofzoiets kunnen leiden.

Veranderd door Rogier, 03 november 2008 - 22:31

In theory, there's no difference between theory and practice. In practice, there is.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures