Supongamos que tenemos el siguiente código fuente:
fib1.c
#includeY hemos recibido el siguiente parche: fib-linear-time.patch#include /* Find the nth Fibonacci number. */ static int fib(int n) { if (n <= 0) return 0; if (n == 1) return 1; return fib(n - 1) + fib(n - 2); } int main(int argc, char** argv) { if (argc < 2) { fprintf(stderr, "Need an argument.\n"); return 1; } printf("%d\n", fib(atoi(argv[1]))); return 0; }
--- fib1.c +++ fib2.c @@ -4,11 +4,17 @@ /* Find the nth Fibonacci number. */ static int fib(int n) { - if (n <= 0) - return 0; - if (n == 1) - return 1; - return fib(n - 1) + fib(n - 2); + int prev = 1; + int current = 0; + int i; + + for (i = 0; i < n; i++) { + int next = current + prev; + prev = current; + current = next; + } + + return current; } int main(int argc, char** argv)Para aplicar el parche simplemente debemos ejecutar la siguiente orden desde consola:
patch < fib-linear-time.patchY con esto nuestro archivo fib1.c quedaría de la forma siguiente: fib1.c
#include#include /* Find the nth Fibonacci number. */ static int fib(int n) { int prev = 1; int current = 0; int i; for (i = 0; i < n; i++) { int next = current + prev; prev = current; current = next; } return current; } int main(int argc, char** argv) { if (argc < 2) { fprintf(stderr, "Need an argument.\n"); return 1; } printf("%d\n", fib(atoi(argv[1]))); return 0; }
No hay comentarios:
Publicar un comentario