Ejemplo: Funciones recursivas

Anuncio
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
Descargar