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