1 van 5
Getallen van Fibonacci berekenen.
Geplaatst: zo 02 nov 2008, 15:42
door Bert F
Volgend programma zou de getallen van fabonacci moeten kunnen berekenen alleen zie ik niet goed hoe?
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.
Re: Getallen van Fibonacci berekenen.
Geplaatst: zo 02 nov 2008, 15:45
door EvilBro
Volgend programma zou de getallen van fabonacci moeten kunnen berekenen alleen zie ik niet goed hoe?
Weet je wat een referentie is?
Re: Getallen van Fibonacci berekenen.
Geplaatst: zo 02 nov 2008, 15:58
door Bert F
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?
Re: Getallen van Fibonacci berekenen.
Geplaatst: zo 02 nov 2008, 16:26
door TD
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).
Re: Getallen van Fibonacci berekenen.
Geplaatst: zo 02 nov 2008, 17:03
door Bert F
Het programma roept zijn eigen idd recursief op. Toch zie ik niet hoe die twee variablen temp1 en temp2 werken.
Re: Getallen van Fibonacci berekenen.
Geplaatst: zo 02 nov 2008, 17:06
door TD
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.
Re: Getallen van Fibonacci berekenen.
Geplaatst: zo 02 nov 2008, 17:20
door Bert F
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.
Re: Getallen van Fibonacci berekenen.
Geplaatst: zo 02 nov 2008, 17:28
door EvilBro
Even terzijde: het programma is hopeloos complex geschreven. Ze hadden beter het volgende kunnen doen:
Code: Selecteer alles
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.
Re: Getallen van Fibonacci berekenen.
Geplaatst: zo 02 nov 2008, 17:29
door Bert F
Bedankt voor je code.
Maar hoe wordt in het oorspronkelijke de globale variable aangesproken?
Re: Getallen van Fibonacci berekenen.
Geplaatst: zo 02 nov 2008, 17:45
door EvilBro
Maar hoe wordt in het oorspronkelijke de globale variable aangesproken?
Die wordt meegegeven als referentie in main.
Re: Getallen van Fibonacci berekenen.
Geplaatst: zo 02 nov 2008, 17:55
door Bert F
tuurlijk Bedankt.
Re: Getallen van Fibonacci berekenen.
Geplaatst: zo 02 nov 2008, 18:12
door Cycloon
Bedenk ook dat dit het schoolvoorbeeld bij uitstek is om aan te tonen dat recursie niet altijd efficiƫnt is.
Re: Getallen van Fibonacci berekenen.
Geplaatst: zo 02 nov 2008, 22:13
door Rogier
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.
Re: Getallen van Fibonacci berekenen.
Geplaatst: ma 03 nov 2008, 21:58
door Vladimir Lenin
Bert F schreef:Volgend programma zou de getallen van fabonacci moeten kunnen berekenen alleen zie ik niet goed hoe?
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.
Re: Getallen van Fibonacci berekenen.
Geplaatst: ma 03 nov 2008, 22:30
door Rogier
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.