La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Igor Santos Grueiro. Para entender la recursividad, primero hay que entender lo qué es la recursividad -Un programador anónimo.

Presentaciones similares


Presentación del tema: "Igor Santos Grueiro. Para entender la recursividad, primero hay que entender lo qué es la recursividad -Un programador anónimo."— Transcripción de la presentación:

1 Igor Santos Grueiro

2 Para entender la recursividad, primero hay que entender lo qué es la recursividad -Un programador anónimo

3 ¡¿QUÉ?!

4 La recursividad consiste en definir una entidad en función de sí misma

5 Podemos definir recursivamente Tipos de datosProblemas

6 Definamos un tipo de datos de manera recursiva: clase Nodo Object elemento Nodo siguiente

7 Ejemplo de recursividad de tipos: Nodo

8 Ahora, a por la difícil: recursividad de ejecución o recursividad de problema

9 La recursividad de ejecución es la posibilidad de definir un problema en función del propio problema

10 Dicho de otro modo: una función que dentro de su código se llama … ¡A SÍ MISMA!

11 Si se llama directamente a sí misma: recursividad directa Si llama a otra a función que vuelve a llamar a la función original (1-n veces): recursividad indirecta o mutua

12 Recursividad directa public static int funcionRec(int n){ if (n == 0){ return 1; } else{ return n * funcionRec(n-1); } Se llama a sí misma directamente

13 Recursividad indirecta o mutua public static boolean impar (int numero){ if (numero==0) return false; else return par(numero-1); } public static boolean par (int numero){ if (numero==0) return true; else return impar(numero-1); } Se llaman entre ellas

14 Para que una función pueda ser recursiva tienen que cumplirse ciertos requisitos:

15 Que pueda definirse en términos de sí misma

16 Que exista un criterio de finalización o caso base

17 Es el caso base

18 Que en cada llamada recursiva se esté más cerca de cumplirse el Caso Base

19 Al ir restando 1, nos acercamos al caso base: el número es 0

20 Que se resuelva el problema en un tiempo limitado o finito

21 Un ejemplo mítico: el cálculo del factorial de un número

22 Lo definimos matemáticamente Solución iterativa: x! = 1 · 2 · … · (x -1) · x Solución recursiva: Si x = 0 x! = 1 Si x > 0 x! = x · (x-1)!

23 Solución iterativa en Java

24 Haced la solución recursiva del procedimiento de cálculo del factorial de un número

25 1 Definimos el caso base public static int factorial(int n){ if (n == 0){ return 1; } El factorial de 0 es 1

26 2 Llamamos a la función acercándonos al caso base public static int factorial(int n){ if (n == 0){ return 1; } else{ return n * factorial(n-1); }

27 Ejemplo n= 3 public static int factorial (int n){ if (n == 0){ return 1; } else{ return n * factorial(n-1); } n Valor de retorno 3 * 32 2 * 1 1 * 0 1 6

28 ¡Hecho!

29 Ejercicio 1 Ejercicio: Escribir un programa que calcule todos los factoriales del 1 hasta el valor entero N que se introduce por teclado, el valor de N es mayor de cero. Diseñad un método que calcule la potencia de un numero real elevado a un entero (en función de multiplicaciones sucesivas). Tanto solución iterativa como recursiva

30 Solución iterativa

31 Solución recursiva

32 Ejercicio 2 Ejercicio: Escribir un programa que calcule todos los factoriales del 1 hasta el valor entero N que se introduce por teclado, el valor de N es mayor de cero. Escribid un método que calcule la suma de los N (N>0) primeros números naturales. Solución recursiva

33 Solución recursiva primera versión

34 Solución recursiva segunda versión

35 Ejercicio 3 Ejercicio: Escribir un programa que calcule todos los factoriales del 1 hasta el valor entero N que se introduce por teclado, el valor de N es mayor de cero. Escribid un método que visualice los N primeros números naturales del 1 al N Solución recursiva

36

37 Ejercicio 4 Ejercicio: Escribir un programa que calcule todos los factoriales del 1 hasta el valor entero N que se introduce por teclado, el valor de N es mayor de cero. Escribir un método que visualice los N primeros números naturales del N al 1 Solución recursiva

38

39 Ejercicio 5 Ejercicio: Escribir un programa que calcule todos los factoriales del 1 hasta el valor entero N que se introduce por teclado, el valor de N es mayor de cero. Escribid un método que visualice los dígitos de un número natural N al revés N = 7815 visualizar el numero 5187

40 Solución recursiva

41 Ejercicio 6 Ejercicio: Escribir un programa que calcule todos los factoriales del 1 hasta el valor entero N que se introduce por teclado, el valor de N es mayor de cero. Escribid un método que visualice los dígitos de un número natural N, uno por línea.

42 Solución recursiva

43 Ejercicio 7 Ejercicio: Escribir un programa que calcule todos los factoriales del 1 hasta el valor entero N que se introduce por teclado, el valor de N es mayor de cero. Escribid un método que sirva para subrayar un texto

44 Solución recursiva

45 Búsqueda binaria Ejercicio: Escribir un programa que calcule todos los factoriales del 1 hasta el valor entero N que se introduce por teclado, el valor de N es mayor de cero. Escribid un método que busque un valor en un array de enteros de un modo dicotómico (el array está ordenado de menor a mayor).

46 Búsqueda dicotómica o binaria Valor a buscar 3 Valor medio Si el valor medio es mayor que el valor a buscar … 13 Valor medio Como el valor medio es igual que el valor a buscar Devolvemos la posición del valor medio: 1

47 Solución recursiva

48 Un ejemplo Ejercicio: Escribir un programa que calcule todos los factoriales del 1 hasta el valor entero N que se introduce por teclado, el valor de N es mayor de cero. Escribir un método que sume los elementos de un array de manera recursiva

49 Partimos de esto

50 A veces se llama un método que llama a un método recursivo para añadir parámetros necesarios de la solución recursiva

51 Solución

52 Es lo que se conoce como recursividad en concha

53 Ejercicio 1 Ejercicio: Escribir un programa que calcule todos los factoriales del 1 hasta el valor entero N que se introduce por teclado, el valor de N es mayor de cero. Diseñar un método para visualizar los elementos de un array de enteros. Con recursividad en concha

54 Solución

55 Ejercicio 2 Ejercicio: Escribir un programa que calcule todos los factoriales del 1 hasta el valor entero N que se introduce por teclado, el valor de N es mayor de cero. Diseñar un método para visualizar los elementos de un fichero de alumnos (Alumno tiene un método mostrar)

56 Solución

57 Ahora, a por la recursividad múltiple Cuando una función se llama a sí misma varias veces

58 La serie de Fibonacci f(0) = 0 f(1) = 1 f(n) = f(n-1) + f(n-2 )

59 Ejercicio 1 Ejercicio: Escribir un programa que calcule todos los factoriales del 1 hasta el valor entero N que se introduce por teclado, el valor de N es mayor de cero. Realizar una función recursiva que calcule el termino n de la serie de Fibonacci

60 Solución

61 Ejercicio 2 Ejercicio: Escribir un programa que calcule todos los factoriales del 1 hasta el valor entero N que se introduce por teclado, el valor de N es mayor de cero. Diseñar un método para calcular el número combinatorio de m elementos tomados de n en n.

62 Primera forma de solución: Cm,n = m! / n!(m-n)!

63 No tiene recursividad propia

64 Segunda forma de solución: Iterativa Cm,n = 1 * (m-1+1) / 1 * (m-2+1) / 2 *... *(m-i+1) / i

65 No tiene recursividad

66 Tercera forma de solución: Recursividad Directa Simple si n = 0 Cm,n = 1 si n > 0 Cm,n = Cm,n-1 * (m-n+1) / n

67 Solución

68 Cuarta forma de solución: Recursividad Directa Múltiple si n = 0Cm,n = 1 si n = mCm,n = 1 si n > mCm,n = 0 si m > n > 0 Cm,n = Cm-1,n + Cm-1,n-1

69 Solución

70 Para entender la recursividad, había que saber lo qué era la recursividad

71 La recursividad NO es eficiente

72 La recursividad proporciona soluciones elegantes

73 Hay pocas virtudes sin prudencia -Marco Tulio Cicerón


Descargar ppt "Igor Santos Grueiro. Para entender la recursividad, primero hay que entender lo qué es la recursividad -Un programador anónimo."

Presentaciones similares


Anuncios Google