II Unidad
Upcoming SlideShare
Loading in...5
×
 

II Unidad

on

  • 514 views

 

Statistics

Views

Total Views
514
Views on SlideShare
514
Embed Views
0

Actions

Likes
0
Downloads
2
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft Word

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    II Unidad II Unidad Document Transcript

    • INTRODUCCIÓNLa recursividad forma parte del repertorio para resolver problemas enComputación y es de los métodos más poderosos y usados.Los algoritmos recursivos ofrecen soluciones estructuradas, modulares yelegantemente simples.La recursividad es un concepto fundamental en matemáticas y en computación.Una definición recursiva dice cómo obtener conceptos nuevos empleando elmismo concepto que intenta describir.En toda situación en la cual la respuesta pueda ser expresada como unasecuencia de movimientos, pasos o transformaciones gobernadas por un conjuntode reglas no ambiguas, la fórmula recursiva es un buen candidato para resolver elproblema.• Ámbito de Aplicación:– General– Problemas cuya solución se puede hallar solucionando el mismo problemapero con un caso de menor tamaño.• Razones de uso:– Problemas “casi” irresolubles con las estructuras iterativas.– Soluciones elegantes.– Soluciones más simples.• Condición necesaria:ASIGNACIÓN DINÁMICA DE MEMORIA RecursividadLa recursividad consiste en realizar una definición de un concepto en términos delpropio concepto que se está definiendo.¿En qué consiste la recursividad?– En el cuerpo de sentencias del subalgoritmo se invoca al propiosubalgoritmo para resolver “una versión más pequeña” del problemaOriginal.– Habrá un caso (o varios) tan simple que pueda resolverse directamente sinnecesidad de hacer otra llamada recursivaEjemplos:·Los números naturales se pueden definir de la siguiente forma:
    • 0 es un Número natural y el sucesor de un número naturales también un número natural.·El factorial de un número natural n, es 1 si dicho número es 0, o n multiplicado porel factorial del número n-1, en caso contrario.·La n-ésima potencia de un número x, es 1 si n es igual a 0, o el producto de x porla potencia (n-1)-ésima de x, cuando n esmayor que 0.Ejemplo: Factorial de un natural.1 si n == 0Factorial(n)= n*Factorial(n-1) si n > 0• Ejemplo: Factorial de un natural.ALGORITMO N Factorial(E n:N)VARN factINICIOSI n == 0 ENTONCES fact = 1SINO fact = n*Factorial(n-1)FINSIDEVOLVER factFIN Escritura de programas recursivos• 1.-Obtención de una definición exacta del problema• 2.-Determinar el tamaño del problema completo que hay que resolverParámetros en la llamada inicial• 3.-Resolver el(los) casos bases o triviales (no recursivos).• 4.-Resolver el caso general en términos de un caso máspequeño (llamada recursiva).Distintos parámetros
    • Ejemplos• Combinaciones:¿cuántas combinaciones de cierto tamaño pueden hacerse de ungrupo total de elementos?– C: número total de combinaciones– Grupo: tamaño total del grupo del que elegir– Miembros: tamaño de cada subgrupo– Grupo>=Miembros-Grupo si Miembros=1C(Grupo, Miembros) -1 si Miembros=Grupo-C(Grupo-1,Miembros-1)+C(Grupo-1,Miembros) si Grupo>Miembros>1 Características de los problemas que pueden ser resueltos de manera recursiva:-.Los problemas pueden ser redefinidos en términos de uno omás subproblemas, idénticos en naturaleza al problema original, pero de algunaforma menores en tamaño.-.Uno o más subproblemas tienen solución directa o conocida, no recursiva.-Aplicando la redefinición del problema en términos de problemas más pequeños,dicho problema se reduce sucesivamente a los subproblemas cuyas soluciones seconocen directamente.-La solución a los problemas más simples se utiliza para construir la solución alproblema inicial.Ejemplos simples de recursividad. A) Cálculo del factorial de un número, por ejemplo, 5.5! = 5 * 4!4! = 4 * 3! DESCOMPOSICIÓN DEL PROBLEMA3!= 3 * 2!2! = 2 * 1!1! = 1 * 0!SOLUCIÓN CONOCIDA O DIRECTA 0! = 11! = 1 * 0! = 12! = 2 * 1! = 23! = 3 * 2! = 6 RESOLUCIÓN DE PROBLEMAS MÁS COMPLEJOS A PARTIR DEOTROS MÁS SIMPLES4! = 4 * 3! = 245! = 5 * 4! = 120
    • Diseño de módulos recursivos.·Módulo M con una llamada a sí mismo: módulo recursivo directo.·Módulo M con una llamada a otro F, que hace una llamada aM: Módulo recursivo indirecto.Ejemplo: Implementación del factorial de un número.public long factorial (long n){if (n == 0) return 1;else return n * factorial(n-1);}Ejemplo: la sucesión de Fibonacci.1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...·El tercer término de la sucesión se obtiene sumando el segundoy el primero. El cuarto, a partir de la suma del tercero y elsegundo.·El problema: calcular el valor del n-ésimo término de lasolución, que se obtendrá sumando los términos n-1 y n-2.Las respuestas a la preguntas anteriores serían:·[P1] fibonacci(n) = fibonacci(n-1) + fibonacci(n-2).·[P2] Casos bases: fibonacci(1) = 1 y fibonacci(2)=1.·[P3] En cada llamada a la rutina fibonacci se reduce el tamañodel problema en uno o en dos, por lo que siempre se alcanzaráuno de los dos casos bases.·[P4] fibonacci(3) = fibonacci(2) + fibonacci(1) = 1 + 1.Se construye la solución del problema n==2 a partir de los dos casos bases.Paso de parámetros a los módulos recursivos.Utilización de parámetros formales: cuidado al decidir silos parámetros serán de entrada, salida o entrada/salida.Veamos un ejemplo:public long factorial (long n){if (n == 0) return 1;else{n = n -1;return (n+1) * factorial(n);}
    • ¿Qué ocurre cuando se empiezan a devolver las llamadas recursivas?n siempre será igual a 0, y se devolverá siempre 1_El factorial de cualquier número será 0 (INCORRECTO) ¿Recursión o iteración?• Ventajas de la Recursión ya conocidas– Soluciones simples, claras.– Soluciones elegantes.– Soluciones a problemas complejos.• Desventajas de la Recursión: INEFICIENCIA– Sobrecarga asociada con las llamadas a subalgoritmos• Una simple llamada puede generar un gran numero de llamadas recursivas.(Fact(n) genera n llamadas recursivas)• ¿La claridad compensa la sobrecarga?• El valor de la recursividad reside en el hecho de que se puede usar para resolverproblemas sin fácil solución iterativa.– La ineficiencia inherente de algunos algoritmos recursivos.