Falla de san andres y el gran cañon : enfoque integral
Unidad 2
1. Unidad 2
Introducción a las estructuras de datos
Sandra G. Canche Dzul
Jorge Manuel Aké Pech
2. Recursividad
Recursión es una técnica de programación en el cual un método puede llamarse a sí
mismo. La recursión es muy interesante y una técnica efectiva en programación ya que
puede producir algoritmos cortos y eficientes.
Algo es recursivo si se define en términos de sí mismo (cuando para definirse hace
mención a sí mismo).
Si la invocación de un subprograma (función o subrutina) se produce desde el propio
subprograma se dice que se trata de un subprograma recursivo.
Un método recursivo es un método, directa o indirectamente, se hace una llamada a sí
mismo.
La recursión consiste en el uso de métodos recursivos.
3. Procedimientos recursivos
Los procedimientos recursivos o recurrentes se
pueden clasificar en dos formas distintas:
Recursividad directa
Recursividad indirecta
4. Recursividad directa
La recursividad directa se presenta cuando el método se manda llamar a sí mismo
dentro de su propio cuerpo de instrucciones.
public int Metodo(int n)
{
:
n = Metodo(n-1);
}
5. Recursividad indirecta
La recursividad indirecta se manifiesta cundo un método llama a otro y dentro del segundo se
manda llamar al primero. O cuando existe la llamada a métodos de forma encadenada y al
terminar el último método llamado, transfiere el control al anterior, hasta llegar al método que
inicio la serie de llamadas.
public int Metodo1(int n)
{
:
n = Metodo2(n-1);
}
public int Metodo2(int n)
{
:
n = Metodo1(n-1);
}
6. Forma de generar la recursividad
Un problema clásico: El factorial de un número.
Todos conocemos que la definición matemática del factorial de un número n se obtiene
de la siguiente forma:
n! = 1*2*3*.......*n ó n! = n*(n-1)*(n-2)*.....1
Por definición matemática, también sabemos que:
0! = 1
Con lo que tendríamos la siguiente definición de factorial:
n1 1 Si n=0 Caso base
n* n-1 otros casos Parte recursiva
Un problema que puede resolverse de manera recursiva, debe tener por lo menos caso
base y 1 parte recursiva, sino no hay recursión.
7. Funcionamiento del proceso
n Llamado a factorial
4 4*factorial(3)
3 3*factorial(2)
2 2*factorial(1)
1 1*factorial(0)
0 1
En general el proceso es (4*factorial(3*factorial(2*factorial(1*factorial(0)))))
8. Realizar de manera recursiva la sumatoria de n números naturales de manera recursiva.
La sumatoria de n números se realiza de la siguiente forma:
n=10
1+2+3+4+5+6+7+8+9+10 = 10+9+8+7+6+5+4+3+2+1
De tal forma que podemos determinar que:
1 si n = 1 paso básico
n + (n-1) si n > 1 paso inductivo o proceso recursivo
//5+suma(4+suma(3+suma(2+suma(1))))
9. Imprimir de manera recursiva la serie de fibonnaci
La serie de fibonacci trabaja de la siguiente forma:
Paso 1: Si tenemos dos semillas formadas por s1=0 y s1=1
0 1
Paso 2. Se suman para obtener el resultado
0 1 1
Ahora la semilla 1 se queda con el valor de la semilla 2 y el resultado se asigna a la semilla 2 y se
vuelve a realizar el paso 2. De tal forma que la serie queda de la siguiente forma:
0 1 1 2 3 5 8 13 21 34 55 89 ………….
Fibonnacci de manera recursiva
Fibonacci(0,1,21)=1
Fibonacci(1,1,21)=2
Fibonacci(1,2,21)=3
Fibonacci(2,3,21)=5
Fibonacci(3,5,21)=8
Fibonacci(5,8,21)=13
Fibonacci(8,13,21)=21
10. Realizar de manera recursiva la potencia
de un número para n.
El cálculo de la potencia de un número se resuelve de la siguiente manera.
Xp=X*X(p-1)*X(p-2)*X(p-3)……= 25= 2 * 2 * 2 * 2 * 2
Sabemos que 20= 1 por lo que determinamos
1 si p = 0 paso básico
n * (n, p-1) si p > 0 paso inductivo
24 2*potencia(2*potencia(2*potencia(2*potencia(2,0))
Potencia(2,4)=2*potencia(2,3)=16
Potencia(2,3)=2*potencia(2,2)=8
Potencia(2,2)=2*potencia(2,1)=4
Potencia(2,1)=2*potencia(2,0)=2
Potencia(2,0)=1
11. Realizar el producto de un número por
sumas sucesivas de manera recursiva.
El producto de un número (3*9) se realiza de la siguiente forma:
1 2 3 4 5 6 7 8 9
3+3+3+3+3+3+3+3+3
cant =0 0 caso base
n+(cant-1) proceso recursivo