Ejemplos EjemplosTema Tema3: 3: Funciones Funciones Recursivas Recursivasen enCC Fundamentos de Informática 1º Ingeniería Industrial Escuela Superior de Ingenieros Universidad de Sevilla Ismael Alcalá Torrego José Ángel Acosta Rodríguez Fernando Dorado Navas Fabio Gómez Estern-Aguilar Manuel López Martínez Amparo Núñez Reyes Carlos Vivas Venegas /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) { int r; int fact(int); r=fact(3); printf(“El factorial de 3 es %d\n”,r); } int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; return (nuevo); } /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) { int r; int fact(int); r=fact(3); printf(“El factorial de 3 es %d\n”,r); } int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; return (nuevo); } r (main) /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) { int r; int fact(int); r=fact(3); printf(“El factorial de 3 es %d\n”,r); } int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; return (nuevo); } r (main) /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) { int r; int fact(int); r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); } r (main) n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; return (nuevo); } 1 Pila de llamada (LIFO) /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) { int r; int fact(int); r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); } r (main) n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; return (nuevo); } 1 Pila de llamada (LIFO) 3 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; return (nuevo); } 1 Pila de llamada (LIFO) 3 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; return (nuevo); } No se da la condición 1 Pila de llamada (LIFO) 3 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; return (nuevo); } 1 Pila de llamada (LIFO) 3 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; 2 return (nuevo); } 2 1 Pila de llamada (LIFO) 3 2 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; 2 return (nuevo); } nuevo (fact) 2 1 Pila de llamada (LIFO) 3 2 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; 2 return (nuevo); } nuevo (fact) No se da la condición 2 1 Pila de llamada (LIFO) 3 2 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; 2 3 return (nuevo); } 3 2 nuevo (fact) n (fact) 3 2 1 Pila de llamada (LIFO) 1 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; 2 3 return (nuevo); } 3 2 nuevo (fact) n (fact) nuevo (fact) 3 2 1 Pila de llamada (LIFO) 1 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; 2 3 return (nuevo); } 3 2 nuevo (fact) n (fact) nuevo (fact) 3 2 1 SI se da la condición Pila de llamada (LIFO) 1 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; 2 3 return (nuevo); } 3 2 nuevo (fact) n (fact) nuevo (fact) 3 2 1 Pila de llamada (LIFO) 1 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; 2 return (nuevo); } nuevo (fact) n (fact) nuevo (fact) 2 1 Pila de llamada (LIFO) 3 2 2 1 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; 2 return (nuevo); } nuevo (fact) n (fact) nuevo (fact) 2 1 Pila de llamada (LIFO) 3 2 2 1 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; return (nuevo); } nuevo (fact) n (fact) nuevo (fact) 1 Pila de llamada (LIFO) 3 6 2 2 1 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) (OCULTA) r (main) { int r; int fact(int); n (fact) r=fact(3); 1 printf(“El factorial de 3 es %d\n”,r); nuevo (fact) } n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; return (nuevo); } nuevo (fact) n (fact) nuevo (fact) 1 Pila de llamada (LIFO) 3 6 2 2 1 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) { int r; int fact(int); r=fact(3); printf(“El factorial de 3 es %d\n”,r); } r (main) n (fact) nuevo (fact) n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; return (nuevo); } nuevo (fact) n (fact) nuevo (fact) Pila de llamada (LIFO) 6 3 6 2 2 1 /* EJEMPLO DE FUNCIÓN RECURSIVA */ /* Cálculo del factorial*/ Memoria #include<stdio.h> void main(void) { int r; int fact(int); r=fact(3); printf(“El factorial de 3 es %d\n”,r); } r (main) n (fact) nuevo (fact) n (fact) int fact (int n) { int nuevo; if (n==1) return (1); nuevo=fact(n-1)*n; return (nuevo); } nuevo (fact) n (fact) nuevo (fact) Pila de llamada (LIFO) 6 3 6 2 2 1