Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 3. Recursividad
1. Directa e indirecta
2. Comparación entre funciones iterativas y recursivas
3. Funciones recursivas con arreglos
4. Ejemplo de transformación de un algoritmo recursivo a
iterativo
5. Ejemplo de transformación de un algoritmo iterativo a
recursivo
6. Conclusiones
7. Referencias
2
Definición
Componentes
Caso base. Es el resultado más simple, lo que
conoce la función.
3
1. Recursión directa e indirecta
4
1. Recursión directa
5
1. Recursión directa
6
1. Recursión directa
8
1. Recursión directa
cola
3 2 8
ini fin
temp 9
1. Recursión directa
int main(){
…
imprimir(cola.ini);
…
}
void imprimir(tipoNodoPtr temp){
if(temp==NULL)
printf(NULL);
else {
printf(%d ->,temp->dato);
imprimir(temp->sig);
}
} 10
1. Recursión directa
La serie Fibonacci
0,1,1,2,3,5,8,13,21,34, …
Empieza con 0 y 1, y tiene la propiedad que cada
12
1. Recursión directa
Torres de Hanoi
Definición del problema:
13
Torres de Hanoi /3
Paso 0 – Inicial
Configuración inicial:
La torre A contiene n discos
de diferentes tamaños.
En el tope sólo pueden ir los
15
Torres de Hanoi /5
16
Torres de Hanoi /6
17
Torres de Hanoi /7
18
Ideas para una solución recursiva
19
void moverTorres( int n, char desde, char hacia,char
temp){
if( n== 1 )
printf("Mueve de %c a %c .\n",desde,hacia);
else {
moverTorres( n- 1, desde, temp, hacia);
printf("Mueve de %c a %c .\n",desde,hacia);
moverTorres( n- 1, temp, hacia, desde);
}
}
20
1. Recursión indirecta
21
2. Comparación entre funciones recursivas e
iterativas
Se basan en una estructura de control:
las iterativas utilizan una estructura de repetición;
las recursivas una estructura de selección.
Incluyen un ciclo de repetición:
la iteración utiliza una estructura de repetición
explícita; la recursión lo hace mediante llamadas
de función repetidas.
Incluyen una prueba de terminación:
la iteración termina cuando falla la condición de
continuación del ciclo; la recursión termina cuando
se reconoce el caso base.
22
2. Comparación entre funciones recursivas e
iterativas
Rendimiento
En el caso de la recursión el invocar repetidamente la
misma función, puede resultar costosa en tiempo de
procesador y espacio de memoria.
23
2. Comparación entre funciones recursivas e
iterativas
24
3. Funciones recursivas con arreglos de
estructuras
25
3. Funciones recursivas con arreglos
26
5. Transformación de un algoritmo recursivo
a iterativo
27
5. Transformación de un algoritmo recursivo
a iterativo
Tipos de transformaciones:
Recursivas finales
Recursivas no finales
28
Recursivas finales
30
Recursivas finales: ejemplo
35
Recursivas no finales: Ejemplo
int suma (int *A, int i){ int suma (int *A, int i){
int result; int result;
if (i < 0) result=0;
result= 0; while (!(i <0)){
else result=result+A[i];
result = A[i] + suma (A, i-1); i=i-1;
return result; }
} return result;
}
37
Conclusiones /1
40