Recursividad

Anuncio
Recursividad
Rafael Palacios 2005
Programa para calcular el factorial
/* Programa para calcular el factorial */
#include <stdio.h>
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
int fact; /* resultado del factorial */
printf("Dame un número entero: ");
scanf("%d", &n);
fact=Factorial(n);
printf("%d!=%d\n",n,fact);
return 0;
}
Inicio del programa
/* Programa para calcular el factorial */
#include <stdio.h>
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
int fact; /* resultado del factorial */
Memoria
printf("Dame un número entero: ");
scanf("%d", &n);
fact=Factorial(n);
printf("%d!=%d\n",n,fact);
return 0;
}
n
????
fact
????
Después de leer n
/* Programa para calcular el factorial */
#include <stdio.h>
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
int fact; /* resultado del factorial */
Memoria
printf("Dame un número entero: ");
scanf("%d", &n);
fact=Factorial(n);
printf("%d!=%d\n",n,fact);
return 0;
}
n
fact
3
????
Llamada
/* Programa para calcular el factorial */
int Factorial(int a)
#include <stdio.h>
/* Factorial recursivo
int Factorial(int a);
*/
{
int main(void)
{
int res; /* resultado */
int n; /* número del cual calculamos n! */
int fact; /* resultado del factorial */
if (a < 1) {
printf("Dame un número entero: ");
res = 1;
scanf("%d", &n);
} else
{
res = a * Factorial(a-1);
fact=Factorial(n);
printf("%d!=%d\n",n,fact);
}
return res;
return 0;
}
}
Memoria
Stack
copia
n
fact
3
????
a
res
3
????
Entra en else
/* Programa para calcular el factorial */
int Factorial(int a)
#include <stdio.h>
/* Factorial recursivo
int Factorial(int a);
*/
{
int main(void)
{
int res; /* resultado */
int n; /* número del cual calculamos n! */
int fact; /* resultado del factorial */
if (a < 1) {
printf("Dame un número entero: ");
res = 1;
scanf("%d", &n);
} else
{
res = a * Factorial(a-1);
fact=Factorial(n);
printf("%d!=%d\n",n,fact);
}
return res;
return 0;
}
}
Memoria
Stack
n
fact
3
????
a
res
3
????
2
Llamada recursiva
#2
#1
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
}
return res;
}
{
res = a * Factorial(a-1);
}
2
return res;
}
Stack
a
res
3
????
Stack
a
res
2
????
Entra en else
#2
#1
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
{
res = a * Factorial(a-1);
}
}
return res;
return res;
}
}
Stack
a
res
3
????
Stack
a
res
2
????
1
Llamada recursiva
#3
#2
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
}
return res;
}
{
res = a * Factorial(a-1);
}
1
return res;
}
Stack
a
res
2
????
Stack
a
res
1
????
Entra en else
#3
#2
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
{
res = a * Factorial(a-1);
}
}
return res;
return res;
}
}
Stack
a
res
2
????
Stack
a
res
1
????
0
Llamada recursiva
#4
#3
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
}
return res;
}
{
res = a * Factorial(a-1);
}
0
return res;
}
Stack
a
res
1
????
Stack
a
res
0
????
Entra en if
#4
#3
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
{
res = a * Factorial(a-1);
}
}
return res;
return res;
}
}
Stack
a
res
1
????
Stack
a
res
0
????
El resultado es 1
#4
#3
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
{
res = a * Factorial(a-1);
}
}
return res;
return res;
}
}
Stack
a
res
1
????
Stack
a
0
res
1
La función retorna 1
#4
#3
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
}
return res;
}
{
res = a * Factorial(a-1);
}
1
return res;
}
Stack
a
res
1
????
Stack
a
0
res
1
#4
#3
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
}
return res;
}
{
res = a * Factorial(a-1);
}
1
return res;
}
Stack
a
res
1
????
Stack
a
0
res
1
El resultado es 1
#4
#3
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
}
return res;
}
{
res = a * Factorial(a-1);
}
1
return res;
}
Stack
Stack
a
1
a
0
res
1
res
1
La función retorna 1
#3
#2
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
}
return res;
}
{
res = a * Factorial(a-1);
}
1
return res;
}
Stack
a
res
2
????
Stack
a
1
res
1
#3
#2
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
}
return res;
}
{
res = a * Factorial(a-1);
}
1
return res;
}
Stack
a
res
2
????
Stack
a
1
res
1
El resultado es 2
#3
#2
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
}
return res;
}
{
res = a * Factorial(a-1);
}
1
return res;
}
Stack
Stack
a
2
a
1
res
2
res
1
La función retorna 2
#2
#1
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
}
return res;
}
{
res = a * Factorial(a-1);
}
2
return res;
}
Stack
a
res
3
????
Stack
a
2
res
2
#2
#1
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
}
return res;
}
{
res = a * Factorial(a-1);
}
2
return res;
}
Stack
a
res
3
????
Stack
a
2
res
2
El resultado es 6
#2
#1
int Factorial(int a)
int Factorial(int a)
/* Factorial recursivo
/* Factorial recursivo
*/
*/
{
{
int res; /* resultado */
int res; /* resultado */
if (a < 1) {
if (a < 1) {
res = 1;
} else
res = 1;
{
} else
res = a * Factorial(a-1);
}
return res;
}
{
res = a * Factorial(a-1);
}
2
return res;
}
Stack
Stack
a
3
a
2
res
6
res
2
La función retorna 6 al main
/* Programa para calcular el factorial */
int Factorial(int a)
#include <stdio.h>
/* Factorial recursivo
int Factorial(int a);
*/
{
int main(void)
int res; /* resultado */
{
int n; /* número del cual calculamos n! */
if (a < 1) {
int fact; /* resultado del factorial */
res = 1;
printf("Dame un número entero: ");
} else
scanf("%d", &n);
fact=Factorial(n);
{
res = a * Factorial(a-1);
6
}
return res;
printf("%d!=%d\n",n,fact);
}
return 0;
Memoria
}
Stack
n
fact
3
????
a
3
res
6
/* Programa para calcular el factorial */
int Factorial(int a)
#include <stdio.h>
/* Factorial recursivo
int Factorial(int a);
*/
{
int main(void)
int res; /* resultado */
{
int n; /* número del cual calculamos n! */
if (a < 1) {
int fact; /* resultado del factorial */
res = 1;
printf("Dame un número entero: ");
} else
scanf("%d", &n);
fact=Factorial(n);
{
res = a * Factorial(a-1);
6
}
return res;
printf("%d!=%d\n",n,fact);
}
return 0;
Memoria
}
Stack
n
fact
3
????
a
3
res
6
Se almacena el resultado final
/* Programa para calcular el factorial */
#include <stdio.h>
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
int fact; /* resultado del factorial */
printf("Dame un número entero: ");
scanf("%d", &n);
fact=Factorial(n);
6
printf("%d!=%d\n",n,fact);
return 0;
Memoria
}
n
3
fact
6
Resumen del factorial de 3
/* Programa para calcular el factorial */
#include <stdio.h>
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
int fact; /* resultado del factorial */
printf("Dame un número entero: ");
scanf("%d", &n);
fact=Factorial(n);
printf("%d!=%d\n",n,fact);
return 0;
}
Resumen
/* Programa para calcular el factorial */
#include <stdio.h>
3
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
int Factorial(int a)
int fact; /* resultado del factorial */
/* Factorial recursivo
printf("Dame un número entero: ");
*/
scanf("%d", &n);
{
int res; /* resultado */
fact=Factorial(n);
printf("%d!=%d\n",n,fact);
if (a < 1) {
res = 1;
return 0;
} else
}
{
res = a * Factorial(a-1);
}
return res;
}
Resumen
/* Programa para calcular el factorial */
#include <stdio.h>
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
2
int Factorial(int a)
int fact; /* resultado del factorial */
/* Factorial recursivo
printf("Dame un número entero: ");
*/
scanf("%d", &n);
{
fact=Factorial(n);
int Factorial(int a)
int res; /* resultado */
/* Factorial recursivo
*/
printf("%d!=%d\n",n,fact);
if (a < 1) {
{
res = 1;
return 0;
} else
}
int res; /* resultado */
{
res = a * Factorial(a-1);
if (a < 1) {
}
res = 1;
return res;
} else
}
{
res = a * Factorial(a-1);
}
return res;
}
Resumen
/* Programa para calcular el factorial */
#include <stdio.h>
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
int Factorial(int a)
int fact; /* resultado del factorial */
/* Factorial recursivo
printf("Dame un número entero: ");
*/
scanf("%d", &n);
{
fact=Factorial(n);
1
int Factorial(int a)
int res; /* resultado */
/* Factorial recursivo
*/
printf("%d!=%d\n",n,fact);
if (a < 1) {
/* Factorial recursivo
int res; /* resultado */
*/
res = 1;
return 0;
} else
}
int Factorial(int a)
{
{
{
res = a * Factorial(a-1);
if (a < 1) {
}
int res; /* resultado */
res = 1;
return res;
} else
}
}
{
if (a < 1) {
res = a * Factorial(a-1);
res = 1;
} else
return res;
{
res = a * Factorial(a-1);
}
}
return res;
}
Resumen
/* Programa para calcular el factorial */
#include <stdio.h>
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
int Factorial(int a)
int fact; /* resultado del factorial */
/* Factorial recursivo
printf("Dame un número entero: ");
*/
scanf("%d", &n);
{
fact=Factorial(n);
int Factorial(int a)
int res; /* resultado */
/* Factorial recursivo
*/
printf("%d!=%d\n",n,fact);
if (a < 1) {
{
int Factorial(int a)
/* Factorial recursivo
int res; /* resultado */
*/
} else {
int Factorial(int a)
{
res = a * Factorial(a-1);
if (a < 1) {
/* Factorial recursivo
int res; /* resultado */
}
res = 1;
*/
return res;
} else {
{
if (a < 1) {
res = a * Factorial(a-1); int res; /* resultado */
res = 1;
}
} else {
return res;
if (a < 1) {
res = a * Factorial(a-1);
}
res = 1;
}
} else {
return res;
res = a * Factorial(a-1);
}
}
res = 1;
return 0;
}
}
0
return res;
}
Resumen
/* Programa para calcular el factorial */
#include <stdio.h>
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
int Factorial(int a)
int fact; /* resultado del factorial */
/* Factorial recursivo
printf("Dame un número entero: ");
*/
scanf("%d", &n);
{
fact=Factorial(n);
int Factorial(int a)
int res; /* resultado */
/* Factorial recursivo
*/
printf("%d!=%d\n",n,fact);
if (a < 1) {
{
int Factorial(int a)
/* Factorial recursivo
int res; /* resultado */
*/
} else {
int Factorial(int a)
{
res = a * Factorial(a-1);
if (a < 1) {
/* Factorial recursivo
int res; /* resultado */
}
res = 1;
*/
return res;
} else {
{
if (a < 1) {
res = a * Factorial(a-1); int res; /* resultado */
res = 1;
}
} else {
return res;
if (a < 1) {
res = a * Factorial(a-1);
}
res = 1;
}
} else {
return res;
res = a * Factorial(a-1);
}
}
res = 1;
return 0;
}
}
1
return res;
}
Resumen
/* Programa para calcular el factorial */
#include <stdio.h>
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
int Factorial(int a)
int fact; /* resultado del factorial */
/* Factorial recursivo
printf("Dame un número entero: ");
*/
scanf("%d", &n);
{
fact=Factorial(n);
int Factorial(int a)
int res; /* resultado */
/* Factorial recursivo
*/
printf("%d!=%d\n",n,fact);
if (a < 1) {
/* Factorial recursivo
int res; /* resultado */
*/
res = 1;
return 0;
} else
}
int Factorial(int a)
{
{
{
res = a * Factorial(a-1);
if (a < 1) {
}
int res; /* resultado */
res = 1;
return res;
} else
}
}
{
if (a < 1) {
res = a * Factorial(a-1);
res = 1;
} else
return res;
{
res = a * Factorial(a-1);
}
}
1
return res;
}
Resumen
/* Programa para calcular el factorial */
#include <stdio.h>
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
int Factorial(int a)
int fact; /* resultado del factorial */
/* Factorial recursivo
printf("Dame un número entero: ");
*/
scanf("%d", &n);
{
fact=Factorial(n);
int Factorial(int a)
int res; /* resultado */
/* Factorial recursivo
*/
printf("%d!=%d\n",n,fact);
if (a < 1) {
{
res = 1;
return 0;
} else
}
int res; /* resultado */
{
res = a * Factorial(a-1);
if (a < 1) {
}
res = 1;
return res;
} else
}
{
res = a * Factorial(a-1);
2
}
return res;
}
Resumen
/* Programa para calcular el factorial */
#include <stdio.h>
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
int Factorial(int a)
int fact; /* resultado del factorial */
/* Factorial recursivo
printf("Dame un número entero: ");
*/
scanf("%d", &n);
{
int res; /* resultado */
fact=Factorial(n);
printf("%d!=%d\n",n,fact);
if (a < 1) {
res = 1;
return 0;
} else
}
{
res = a * Factorial(a-1);
}
6
return res;
}
Resumen
/* Programa para calcular el factorial */
#include <stdio.h>
int Factorial(int a);
int main(void)
{
int n; /* número del cual calculamos n! */
int fact; /* resultado del factorial */
printf("Dame un número entero: ");
scanf("%d", &n);
fact=Factorial(n);
printf("%d!=%d\n",n,fact);
return 0;
}
El resultado es 6
Descargar