Professional Documents
Culture Documents
Recursividad
2/11
ndice
ndice ...........................................................................................................................................2
1
Introduccin.........................................................................................................................3
2.1.1
2.1.2
2.2
Recursin mltiple.......................................................................................................6
2.3
Ejercicios .............................................................................................................................9
3/11
1 Introduccin
Una funcin recursiva es una funcin que se llama a si misma. Esto es, dentro del cuerpo
de la funcin se incluyen llamadas a la
propia funcin. Esta estrategia es una
alternativa al uso de bucles. Una
solucin recursiva es, normalmente,
menos eficiente que una solucin basada
en bucles. Esto se debe a las operaciones
auxiliares
que
llevan
consigo
las
2 Tipos de recursin
Como regla bsica, para que un problema pueda resolverse utilizando recursividad, el
problema debe poder definirse recursivamente y, segundo, el problema debe incluir una
4/11
factorial(4) = 4 * factorial(3)
return(4*6)
factorial(3) = 3 * factorial(2)
return(3*2)
factorial(2) = 2 * factorial(1)
return (2*1)
factorial(1) = 1
5/11
return 1;
Cada fila del anterior grfico supone una instancia distinta de ejecucin de la funcin fact.
Cada instancia tiene un conjunto diferente de variables locales.
/*
*ejemplo7_2.c
*/
#include <stdio.h>
long mcd(long,long);
main(int argc, char *argv[]){
long a= 4454,b= 143052;
printf("El m.c.d. de %ld y %ld es %ld\n",a,b,mcd(a,b));
}
6/11
Estos nmeros poseen mltiples propiedades, algunas de las cuales todava siguen
descubrindose hoy en da, entre las cuales estn:
Tan slo un trmino de cada tres es par, uno de cada cuatro es mltiplo de 3, uno
de cada cinco es mltiplo de 5, etc. Esto se puede generalizar, de forma que la
sucesin de Fibonacci es peridica en las congruencias mdulo m, para cualquier
m.
Si F(p) es un nmero primo, p tambin es primo, con una nica excepcin. F(4)=3;
3 es primo, pero 4 no lo es.
7/11
/*
*ejemplo7_3.c
*/
#include <stdio.h>
long fibonacci (int);
int main()
{
int n= 30;
printf("El %d nmero de Fibonacci es %ld\n", n,
fibonacci(n));
}
long fibonacci(int n)
{
if (1 == n || 2 == n) {
return 1;
} else {
return (fibonacci(n-1) + fibonacci(n-2));
}
}
8/11
else return(par(n-1));
}
return(0)
return(0)
return(0)
return(0)
return(0)
(no es par)
9/11
3 Ejercicios
1. Construir una funcin recursiva que calcule la suma de los n primeros nmeros
naturales.
2. Construir una funcin recursiva que imprima la lista de nmeros naturales
comprendidos entre dos valores a y d dados por el usuario.
3. Escribir una funcin recursiva que devuelva la cantidad de dgitos de un nmero
entero.
4. Escribir una funcin recursiva que calcule x^y mediante multiplicaciones
sucesivas, siendo x e y dos nmeros enteros.
5. Escribir una funcin recursiva que calcule x*y mediante sumas sucesivas, siendo x
e y dos nmeros enteros.
6. Calcula mediante un diseo recursivo el valor mximo de un vector de
componentes numricas.
7. Construir una funcin recursiva que cuente el nmero de secuencias de dos 1
seguidos que hay en una cadena de caracteres que represente un nmero binario.
8. Escribir la funcin recursiva que recibiendo como parmetros una cadena de
dgitos hexadecimales y su longitud devuelva el valor decimal que representa dicha
cadena.
9. Modificar el programa anterior para que la secuencia de 1 sea de longitud m.
10. Calcular C (n,k) siendo:
C (n,0)= C (n,n)=1
si n>=0
si n>k>0
10/11
11/11