La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.

Presentaciones similares


Presentación del tema: "Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos."— Transcripción de la presentación:

1 Oscar Bedoya. oscarbed@eisc.univalle.edu.co http://eisc.univalle.edu.co/~oscarbed/Estructuras/ Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos

2 Recursión Definición La Recursión permite definir la solución de un problema en términos de sí mismo. Un subprograma que se llama a sí mismo se dice que es recursivo.

3 Recursión Definición En toda definición recursiva de un problema se debe establecer un estado básico, es decir un estado en el cual la solución no se presente de manera recursiva sino directamente. Esto permite que las llamadas recursivas no continúen indefinidamente. Además, la entrada (datos) del problema debe ir acercándose al estado básico, por medio de llamados recursivos para un conjunto de datos más pequeño.

4 Recursión El número factorial(!) 0!=1 1!=1 2!=2*1 3!=3*2*1 4!=4*3*2*1 5!= 5*4*3*2*1

5 Recursión El número factorial(!) 0!=1 1!=1

6 Recursión El número factorial(!) 0!=1 1!=1 2! = 2 * 1 = 2*1!

7 Recursión El número factorial(!) 0!=1 1!=1 2! = 2 * 1 = 2*1! 3!=3 * 2*1 = 3 * 2!

8 Recursión El número factorial(!) 0!=1 1!=1 2! = 2 * 1 = 2*1! 3!=3 * 2*1 = 3 * 2! 4!=4 * 3*2*1 = 4 * 3!

9 Recursión El número factorial(!) 0!=1 1!=1 2! = 2 * 1 = 2*1! 3!=3 * 2*1 = 3 * 2! 4!=4 * 3*2*1 = 4 * 3! n! = n*(n-1)!

10 Recursión El número factorial(!) Si n es 1 factorial de n es 1 Sino factorial de n es n * factorial de (n-1)

11 Recursión El número factorial(!) Si n es 1 factorial de n es 1 Sino factorial de n es n * factorial de (n-1) Caso básico, directo, no recursivo

12 Recursión El número factorial(!) Si n es 1 factorial de n es 1 Sino factorial de n es n * factorial de (n-1) Llamado recursivo de la operación que se está definiendo. El llamado recursivo se realiza para un valor más pequeño

13 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); }

14 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); } factorial(4)

15 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); } factorial(4) return 4*factorial(3)

16 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); } factorial(4) return 4*factorial(3) factorial(3) return 3*factorial(2)

17 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); } factorial(4) return 4*factorial(3) factorial(3) return 3*factorial(2) factorial(2) return 2*factorial(1)

18 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); } factorial(4) return 4*factorial(3) factorial(3) return 3*factorial(2) factorial(2) return 2*factorial(1) factorial(1) return 1, caso base

19 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); } factorial(4) return 4*factorial(3) factorial(3) return 3*factorial(2) factorial(2) return 2*factorial(1) 1

20 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); } factorial(4) return 4*factorial(3) factorial(3) return 3*factorial(2) factorial(2) return 2*factorial(1) 1

21 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); } factorial(4) return 4*factorial(3) factorial(3) return 3*factorial(2) factorial(2) return 2*1

22 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); } factorial(4) return 4*factorial(3) factorial(3) return 3*factorial(2) 2

23 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); } factorial(4) return 4*factorial(3) factorial(3) return 3*2

24 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); } factorial(4) return 4*factorial(3) 6

25 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); } factorial(4) return 4*6

26 Recursión public int factorial( int n ) { if (n == 1) return 1; else return n * factorial(n - 1); } factorial(4) == 24

27 Recursión Multiplicación de números naturales Obtener 4 * 3 recursivamente 4 * 3 = 4 + 4*2 4 * 2 = 4 + 4*1 4 * 1 = 4

28 Recursión Multiplicación de números naturales Obtener 4 * 3 recursivamente 4 * 3 = 4 + 4*2 4 * 2 = 4 + 4*1 4 * 1 = 4

29 Recursión Multiplicación de números naturales Obtener 4 * 3 recursivamente 4 * 3 = 4 + 4*2 4 * 2 = 4 + 4 = 8 4 * 1 = 4

30 Recursión Multiplicación de números naturales Obtener 4 * 3 recursivamente 4 * 3 = 4 + 4*2 4 * 2 = 4 + 4 = 8 4 * 1 = 4

31 Recursión Multiplicación de números naturales Obtener 4 * 3 recursivamente 4 * 3 = 4 + 8 4 * 2 = 4 + 4 = 8 4 * 1 = 4

32 Recursión Multiplicación de números naturales Obtener 4 * 3 recursivamente 4 * 3 = 4 + 8 =12 4 * 2 = 4 + 4 = 8 4 * 1 = 4

33 Recursión Multiplicación de números naturales Cuál es el caso básico Cómo es la definición recursiva

34 Recursión Multiplicación de números naturales a * b = a, si b==1 a * b = a + a *(b-1), si b>1

35 Recursión Multiplicación de números naturales public int multiplicar (int a, int b) { if(b==1) return a; else return a + multiplicar( a, b-1); }

36 Recursión La serie fibonacci 0, 1, 1, 2, 3, 5, 8, 13, 21, …

37 Recursión La serie fibonacci 0, 1, 1, 2, 3, 5, 8, 13, 21, … Por definición, los dos primeros valores son 0 y 1 respectivamente. Los otros números de la serie se calculan sumando los dos números que le preceden

38 Recursión La serie fibonacci 0, 1, 1, 2, 3, 5, 8, 13, 21, … fib(n)=0,n==0 fib(n)=1,n==1 fib(n) = fib(n-1) + fib(n-2),n>=2

39 Recursión Multiplicación de números naturales public int fib (int n) { if ( n==0 || n==1 ) return n; else return fib(n-1) + fib(n-2); }

40 Recursión Calcular la suma de los elementos de un arreglo 33 8 23 99

41 Recursión Calcular la suma de los elementos de un arreglo + 99 33 8 23 99 33 8 23

42 Recursión Calcular la suma de los elementos de un arreglo + 99 33 8 23 99 33 8 23 + (99 + 23) 33 8

43 Recursión Calcular la suma de los elementos de un arreglo + 99 33 8 23 99 33 8 23 + (99 + 23) 33 8 + (99+23+8) 33

44 Recursión Calcular la suma de los elementos de un arreglo + 99 33 8 23 99 33 8 23 + (99 + 23) 33 8 99+23+8+33=163

45 Recursión Calcular la suma de los elementos de un arreglo public int suma (int x[], int n ) { if(n == 0) return x[0]; else return x[n] + suma(x,n - 1); }

46 Recursión Defina un método recursivo para encontrar b d Defina un método recursivo para encontrar el máximo común divisor entre a y b. Búsqueda binaria recursiva


Descargar ppt "Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos."

Presentaciones similares


Anuncios Google