SlideShare una empresa de Scribd logo
INTRODUCCIÓN
La recursividad forma parte del repertorio para resolver problemas en
Computación y es de los métodos más poderosos y usados.
Los algoritmos recursivos ofrecen soluciones estructuradas, modulares y
elegantemente 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 el
mismo concepto que intenta describir.
En toda situación en la cual la respuesta pueda ser expresada como una
secuencia de movimientos, pasos o transformaciones gobernadas por un conjunto
de reglas no ambiguas, la fórmula recursiva es un buen candidato para resolver el
problema.

• Ámbito de Aplicación:
– General
– Problemas cuya solución se puede hallar solucionando el mismo problema
pero 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



                                 Recursividad
La recursividad consiste en realizar una definición de un concepto en términos del
propio concepto que se está definiendo.

¿En qué consiste la recursividad?

– En el cuerpo de sentencias del subalgoritmo se invoca al propio
subalgoritmo para resolver “una versión más pequeña” del problema
Original.

– Habrá un caso (o varios) tan simple que pueda resolverse directamente sin
necesidad de hacer otra llamada recursiva

Ejemplos:
·Los números naturales se pueden definir de la siguiente forma:
0 es un Número natural y el sucesor de un número natural
es 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 por
el 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 por
la potencia (n-1)-ésima de x, cuando n es
mayor que 0.

Ejemplo: Factorial de un natural.

1 si n == 0
Factorial(n)= n*Factorial(n-1) si n > 0

• Ejemplo: Factorial de un natural.

ALGORITMO N Factorial(E n:N)
VAR
N fact
INICIO
SI n == 0 ENTONCES fact = 1
SINO fact = n*Factorial(n-1)
FINSI
DEVOLVER fact
FIN

                 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 resolver
Pará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ás
pequeño (llamada recursiva).
Distintos parámetros
Ejemplos
• Combinaciones:¿cuántas combinaciones de cierto tamaño pueden hacerse de un
grupo 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=1
C(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 o
más subproblemas, idénticos en naturaleza al problema original, pero de alguna
forma 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 se
conocen directamente.

-La solución a los problemas más simples se utiliza para construir la solución al
problema 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 PROBLEMA
3!= 3 * 2!
2! = 2 * 1!
1! = 1 * 0!

SOLUCIÓN CONOCIDA O DIRECTA 0! = 1
1! = 1 * 0! = 1
2! = 2 * 1! = 2
3! = 3 * 2! = 6 RESOLUCIÓN DE PROBLEMAS MÁS COMPLEJOS A PARTIR DE
OTROS MÁS SIMPLES
4! = 4 * 3! = 24
5! = 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 a
M: 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 segundo
y el primero. El cuarto, a partir de la suma del tercero y el
segundo.
·El problema: calcular el valor del n-ésimo término de la
solució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ño
del 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 si
los 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 resolver
problemas sin fácil solución iterativa.

– La ineficiencia inherente de algunos algoritmos recursivos.

Más contenido relacionado

PPT
www.bugaonline.com - Programación Entera
DOCX
Ejercicios
PPTX
Programación no lineal
PDF
13894544 metodos-numericos-para-ingenieria (1)
PDF
Analisis numerico axcel quintero
PPTX
Programacionnolineal
PPTX
Programación no lineal
DOCX
Eddimar soto (1)
www.bugaonline.com - Programación Entera
Ejercicios
Programación no lineal
13894544 metodos-numericos-para-ingenieria (1)
Analisis numerico axcel quintero
Programacionnolineal
Programación no lineal
Eddimar soto (1)

La actualidad más candente (19)

PDF
130112719 diferencias-divididas-de-newton
PPTX
Optomizacion cd
PPS
polinomios y fracciones algebraicas
DOCX
Introduccion a la teoria de interpolacion
PDF
Metodos de Programacion no lineal
DOCX
Matematicas cuaderno Cálculo Númerico
PDF
Guia representaciones simbolicas y algoritmos
PDF
Programación lineal
PDF
Guia 3 matlab
DOC
resolucion de ecuaciones diferenciales con MATLAB
PPTX
Optimización
DOCX
Leyes de los exponentes
PDF
Metodos numericos basicos_para_ingen
DOCX
Investigacion sobre interpolacion
PPTX
PDF
Metodo simplex-investigacion-simulacion-y-operaciones
DOCX
Teoría de Interpolación
DOCX
Teoría de Interpolación.
PPTX
Leyes delos exponentes presentación
130112719 diferencias-divididas-de-newton
Optomizacion cd
polinomios y fracciones algebraicas
Introduccion a la teoria de interpolacion
Metodos de Programacion no lineal
Matematicas cuaderno Cálculo Númerico
Guia representaciones simbolicas y algoritmos
Programación lineal
Guia 3 matlab
resolucion de ecuaciones diferenciales con MATLAB
Optimización
Leyes de los exponentes
Metodos numericos basicos_para_ingen
Investigacion sobre interpolacion
Metodo simplex-investigacion-simulacion-y-operaciones
Teoría de Interpolación
Teoría de Interpolación.
Leyes delos exponentes presentación
Publicidad

Destacado (13)

PDF
Cuestionario investigacion
PDF
PDF
Tarea de Matematicas
DOCX
Teatro rbmh en la UE
PDF
Multi divide decimales-sexto
PPT
BUSINESS PRESENTATION(
PDF
APPLICATION OF CONVERGENCE THEORIES AND NEW ECONOMIC GEOGRAPHY IN PORTUGAL. A...
PPT
Purple cow 2012 (ape button)
PDF
Receita Sopa Da Horta
PDF
Los que no salen de la nave ( los curiosos 2010)
PPT
Bocadillos
PDF
Cuestionario consultado
PDF
Bienvenidos!
Cuestionario investigacion
Tarea de Matematicas
Teatro rbmh en la UE
Multi divide decimales-sexto
BUSINESS PRESENTATION(
APPLICATION OF CONVERGENCE THEORIES AND NEW ECONOMIC GEOGRAPHY IN PORTUGAL. A...
Purple cow 2012 (ape button)
Receita Sopa Da Horta
Los que no salen de la nave ( los curiosos 2010)
Bocadillos
Cuestionario consultado
Bienvenidos!
Publicidad

Similar a II Unidad (20)

PPTX
2. Recursividad
PPT
Recursividad
PPT
Recursividad
PPTX
Funciones recursivas
PPTX
Recursividad 100329105433-phpapp01
PPT
Unidad 2 p1
PPTX
Programas_Recursivos.pptx
PDF
Programación Orientada a Objetos parte 3
PDF
Recursividad.pdf
PPTX
2 clase 1_recursividad
PPTX
Recursividad
PPT
Recursividad-Analisis de Algoritmos .ppt
PPT
Presentación de Recursividad para Estructuras de datos.ppt
PPT
Tecnicas de Recursividad_Programacion.ppt
PPTX
recursividad.pptx
PPTX
recursividad EN PROGRAMACION ORIENTADA .pptx
PPT
Recursividad.ppt
DOCX
Recursividad
PPTX
Recursividad-en-Programacion-JEFFERSON PERDOMO
2. Recursividad
Recursividad
Recursividad
Funciones recursivas
Recursividad 100329105433-phpapp01
Unidad 2 p1
Programas_Recursivos.pptx
Programación Orientada a Objetos parte 3
Recursividad.pdf
2 clase 1_recursividad
Recursividad
Recursividad-Analisis de Algoritmos .ppt
Presentación de Recursividad para Estructuras de datos.ppt
Tecnicas de Recursividad_Programacion.ppt
recursividad.pptx
recursividad EN PROGRAMACION ORIENTADA .pptx
Recursividad.ppt
Recursividad
Recursividad-en-Programacion-JEFFERSON PERDOMO

II Unidad

  • 1. INTRODUCCIÓN La recursividad forma parte del repertorio para resolver problemas en Computación y es de los métodos más poderosos y usados. Los algoritmos recursivos ofrecen soluciones estructuradas, modulares y elegantemente 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 el mismo concepto que intenta describir. En toda situación en la cual la respuesta pueda ser expresada como una secuencia de movimientos, pasos o transformaciones gobernadas por un conjunto de reglas no ambiguas, la fórmula recursiva es un buen candidato para resolver el problema. • Ámbito de Aplicación: – General – Problemas cuya solución se puede hallar solucionando el mismo problema pero 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 Recursividad La recursividad consiste en realizar una definición de un concepto en términos del propio concepto que se está definiendo. ¿En qué consiste la recursividad? – En el cuerpo de sentencias del subalgoritmo se invoca al propio subalgoritmo para resolver “una versión más pequeña” del problema Original. – Habrá un caso (o varios) tan simple que pueda resolverse directamente sin necesidad de hacer otra llamada recursiva Ejemplos: ·Los números naturales se pueden definir de la siguiente forma:
  • 2. 0 es un Número natural y el sucesor de un número natural es 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 por el 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 por la potencia (n-1)-ésima de x, cuando n es mayor que 0. Ejemplo: Factorial de un natural. 1 si n == 0 Factorial(n)= n*Factorial(n-1) si n > 0 • Ejemplo: Factorial de un natural. ALGORITMO N Factorial(E n:N) VAR N fact INICIO SI n == 0 ENTONCES fact = 1 SINO fact = n*Factorial(n-1) FINSI DEVOLVER fact FIN 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 resolver Pará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ás pequeño (llamada recursiva). Distintos parámetros
  • 3. Ejemplos • Combinaciones:¿cuántas combinaciones de cierto tamaño pueden hacerse de un grupo 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=1 C(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 o más subproblemas, idénticos en naturaleza al problema original, pero de alguna forma 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 se conocen directamente. -La solución a los problemas más simples se utiliza para construir la solución al problema 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 PROBLEMA 3!= 3 * 2! 2! = 2 * 1! 1! = 1 * 0! SOLUCIÓN CONOCIDA O DIRECTA 0! = 1 1! = 1 * 0! = 1 2! = 2 * 1! = 2 3! = 3 * 2! = 6 RESOLUCIÓN DE PROBLEMAS MÁS COMPLEJOS A PARTIR DE OTROS MÁS SIMPLES 4! = 4 * 3! = 24 5! = 5 * 4! = 120
  • 4. 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 a M: 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 segundo y el primero. El cuarto, a partir de la suma del tercero y el segundo. ·El problema: calcular el valor del n-ésimo término de la solució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ño del 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 si los 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); }
  • 5. ¿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 resolver problemas sin fácil solución iterativa. – La ineficiencia inherente de algunos algoritmos recursivos.