cool nok, men hvis Morten ikke er så skarp i C/C++ er 32 linjer C kode nok lettere at gennemskue end 108 linjer C++...just my 2 cents worth
Forresten, hvis din lærer spørger, hvorfor du ikke brugte en rekursiv løsning ala denne:
int fib(int num) {
if (num < 0) {
return 0;
} else if (num <= 2) {
return 1;
} else {
return fib(num - 1) + fib(num - 2);
}
}
...så kan du smide dette program efter dem:
#include <stdio.h>
#include <stdlib.h>
static long counter = 0;
int fib(int num, long caller) {
counter++;
long me = counter;
printf(" call_%ld [label=\"fib(%d)\"];\n", me, num);
if (caller > 0) {
printf(" call_%ld -> call_%ld;\n", caller, me);
}
if (num < 0) {
return 0;
} else if (num <= 2) {
return 1;
} else {
return fib(num - 1, me) + fib(num - 2, me);
}
}
int main (int argc, char ** argv) {
int num;
if (argc < 2) {
printf("Usage: %s <num>\n", argv[0]);
}
num = atoi(argv[1]);
printf("digraph G {\n");
fib(num, 0l);
printf("}\n");
return 0;
}
Det viser, hvordan en beregning skal gentages mange gange og derfor er rekursion ikke en god løsning for Fibonacci.
Følgende brug (under Linux):
robert@robert-laptop:~$ ./fib 8 | dot -Tpng | display -
...vil poppe følgende billede op:
http://www.the-playground.dk/uploads/Main/Fib8.pngDu kan se, at for at beregne det ottende Fibonacci tal, så skal man beregne det syvende én gang, det sjette to gange, det femte tre gange, det fjerde fem gange, og så videre. Det bliver virkelig tungt når man når op på en 30 stykker.
Indlæg senest redigeret d. 17.03.2010 20:54 af Bruger #2695