SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
Ing. Mary Lopez
Programacion II
Iterar es Humano Recursividad es Divino
Universidad Autónoma Gabriel Rene Moreno
FICCT
Semestre I/2018
Ing. Mary Dunnia López
Contenido
Introducción1
Principios de la Inducción Completa2
Estrategias para Procesos Recusivos3
Ejercicios4
Ing. Mary Dunnia López
Definición
- Es una Técnica que
permite que una
función se llame a
si misma.
Recursividad
Definition
- Un algoritmo es
recursivo si al estar
encapsulado en una
función es llamado
desde la misma
función por lo menos
1 vez.
Recursión va ligado a repetición
Ing. Mary Dunnia López
1.1 Validez del algoritmo recursivo
Caso Base
• Evita que el
algoritmo sea
infinito.
• El problema puede
resolverse sin tener
que hacer uso una
nueva llamada a si
mismo.
Al menos
2 elementos
Paso Recursivo
 Relaciona el
resultado del
algoritmo en base a
los resultados de
casos mas simples.
 Se hacen llamadas a
la misma función
pero cada vez mas
próximas al caso
base.
Ing. Mary Dunnia López
1.2 Utilidad de la Recursividad
Un Funcion
se llama
a si misma
Codificación
simple y
corta
Existe una
sobrecarga
asociada con
las llamadas a
sub algoritmos
Algoritmo Recursivo
Por que usar ?
Ing. Mary Dunnia López
1.3 ¿Cuándo usar recursividad?
 Es una técnica potente de programación que permite resolver
problemas complejos en forma simple elegante y clara.
 Sin Embargo:
 Sera la ultima solución a intentar en caso que los procesos
iterativos no funcionen.
 El uso de recursividad únicamente cuando no haya solución
iterativa.
 Si analizamos en el caso factorial
 Existen algoritmos complejos se codifican mas fácil mediante
métodos recursivos.
RECURSIVO
Int Factorial (int n )
{
If (n==0) return (1);
Return (n*Factorial (n-1));
}
//Almacena : datos y direcciones
ITERATIVO:
Int Factorial (int n )
{
Int a, res = 1;
For(a=1; a<=n; a++ )
res = res*a;
return (res);
}
//Almacena solo datos
Ing. Mary Dunnia López
1.4 Tipos de recursividad
 Simple  Si cumple que tiene una sola
llama a si misma. Se lo puede convertir
en algoritmo iterativo. Por ejemplo: El
factorial.
 Multiple --> Varias llamadas a si misma
por ejemplo: Fibonacci
 Anidada --> Es cuando alguna
llamada recursiva recibe como
parámetro a una llamada recursiva,
su complejidad en término de
llamadas recursivas resultará mucho
más difícil de calcular
 Cruzada --> son algoritmos donde una
función provoca una llamada a si misma
de forma indirecta, a través de otras
funciones.
int par (int n){
if( n==0)
return (1);
else
return (impar(n-1));
}
int impar (int n){
if( n==0)
return (0);
else
return (par (n-1));
}
Ing. Mary Dunnia López
La caída de dominós en cadena ilustra la idea del principio de
inducción: si el primer domino cae, y si cualquiera al caer hace
caer al siguiente, entonces todos caen. (Tomado del libro
Discrete mathematics" de K. Rosen)
Ing. Mary Dunnia López
 Para entender recursividad se debe conocer un poco de los tipos
inductivos, aplicando la inducción matemática.
Un tipo inductivo es aquel que tiene una cantidad variable de elementos, y
que si cierta condición se cumple para un elemento, entonces es posible
demostrar que se cumple para todos los demás.
 Si en una fila muy larga de personas alguien dice un secreto a otra esta
automáticamente se lo dice a la persona que está a lado de ella.
¿Se enterarán entonces todas las personas de la fila del secreto contado?
 Una primer persona se lo dice a la segunda, esta al recibir el mensaje se lo dice
a la tercera, esta se lo dirá a la cuarta y así sucesivamente hasta llegar al final de
la fila. Luego la propiedad se cumple para todos los que estén en la fila.
 El principio de inducción completa parte de un esquema proposicional
¿ Qué es esquema proporcional ?
Ing. Mary Dunnia López
 Una proposición es una oración de la que se puede decir que es falso o
verdadero.
 En esta oración figura una variable, la cual al ser reemplazada por un
valor de su dominio la convierten en una proposición:
P1[x] = “Dos es mayor que x", x E {1,2,3,4}
P2[n] = n < 2 , n E {3,4,5,6,7}
P3[n] = “La suma de los primeros n números
naturales es igual al producto de N
por su sucesor dividido entre dos", n E |N
P4[n] = 1+2+3+…+n= n*(n+1)/2, n E |N
2.1 Esquema proposicional
Ing. Mary Dunnia López
2.2 El primer PIC
 Sea P[n] un esquema proposicional sobre los Naturales, se puede demostrar
que P[n] es válido si se logra probar que:
 P[1] es verdadero  Es el primer valor del dominio
 Suponiendo que P[n-1] (hipótesis) es verdadero  Todas las
proposiciones menos una. La penúltima proposición
 Probar que P[n] también es verdadero
 Caso Base.  Es el proceso para el primer valor de la variable de
recursión. Por lo general:
• Si es una lista  Lista vacía
• Debe ser la nada, lo vacío, lo nulo  0
• Algún otro número  1
 Caso General  Es el proceso que hace lo que se necesita, por lo que
se lo utiliza pero con un valor menos (P[n-1]).
Ing. Mary Dunnia López
2.3 El Segundo PIC en recursión
 Caso Base.  Debe resolver el problema para los primeros m valores
del dominio de la variable de recursión.
 Caso General  Es el proceso hace lo que se necesita, pero lo hace
para K (P[k]) , usando éste proceso debe hacer que funcione para N
(P[n]).
• Para k=n-1  M=1 (se necesita mínimo un caso base)
• Para k=n-2  M=2 (se necesita al menos 2 casos base)
Sea P[n] un esquema proposicional sobre los Naturales, se puede
demostrar que P[n] es válido si se puede probar que:
a) P[1]^P[2] ^.. ^P[m]  Es verdadero
b) Suponiendo P[k] (hipótesis)  Es verdadero. Donde m<k<n
c) Probar que P[n] también lo es.
 Dos estrategias de resolución de problemas recursivos:
 Divide y vencerás : Divide el problema de tamaño n en problemas más
pequeños cada uno de los cuales es similar al original pero de menor tamaño.
• Si se llega a una solución de los sub-problemas, se podrá construir de forma
sencilla una solución al problema general.
• Cada uno de esos sub-problemas se podrá resolver de forma directa (caso base)
o dividiéndolos en problemas más pequeños mediante la recursividad.
 Backtracking = Fuerza Bruta = Vuelta Atras. Divide la solución en pasos,
en cada uno de los cuales hay una serie de opciones que ha que probar de
forma sistemática. En cada paso se busca una posibilidad o solución o
solución aceptable.
• Si se encuentra una solución valida pasa a decidir el paso siguiente.
• Si no se encuentra una solución aceptable, se retrocede hasta la última solución
aceptable encontrada y se elige una opción distinta a la anterior. La
recursividad se utiliza para poder retroceder hasta encontrar una solución
aceptable.
• Ejemplos: Juegos de tablero, laberintos, etc.
Ing. Mary Dunnia López
3.1 Definición de Procesos Recursivos
1. ¿Cuál es la variable de recursión?
 Es lo primero que hay que identificar
 Indica cuantas veces se repite la acción principal del proceso.
2. ¿Cuál es el dominio de la variable de recursión?
• El conjunto de números naturales de 0 a N.
3. Caso Base Resolver el problema para el primer valor del dominio de la
variable de recursión (Definido en el Paso 2)
4. Paso Recursivo  Si ya existe un proceso que hace lo que se necesita, en
este paso se lo LLAMA disminuyendo o aumentado el numero de elementos
N para que se acerque al CASO BASE. Este paso debe completar lo que
falte.
Ing. Mary Dunnia López
3.2 Resolución de Procesos Recursivos
Resolución de problemas recursivos. Para hallar la solución
recursiva a un problema podemos hacernos tres preguntas:
1. ¿Cómo se puede definir el problema en términos de uno o más ?
• Problemas más pequeños del mismo tipo que el original.
2. ¿Qué instancias del problema harán de caso base?
• Conforme el problema se reduce de tamaño, se alcanzará el caso base
3. ¿Cómo se usa la solución del caso base para construir una solución
• Alcanzado el caso base, determinar como ahora lograr la solución
final.
Ing. Mary Dunnia López
3.3 Pasos para crear un AR
Escriba un «IF»
a. caso Base  Donde la función no se llama a si misma.
Simple = No se necesita llamada recursiva (no hay
repetición) Tal vez deba almacenar el resultado en una
variable.
Escriba un «ELSE»
a. Paso Recursivo  Donde la función se llama a si misma
Es la próxima entrada/estado
Esta deberá aproximarse cada vez mas al caso base
Asuma que la llamada recursiva funciona:
a. Pregúntese que hace el algoritmo?
b. Pregúntese como ayuda en la solución del problema ?
Ing. Mary Dunnia López
3.1.4 Base Para escribir el AR
IF (pregunta por el caso base) {
//Caso Base
} else {
// Paso Recursivo
}
Ing. Mary Dunnia López
Ejemplo 1: Factorial Recursivo
 Definición recurrente de la función factorial n!
Si n=0 1  Caso Base
N! =
Si n>=1 n*(n-1)!  Paso recursivo
3! = 3 · (3-1)!
= 3 · 2! = 3 · 2 · (2-1)!
= 3 · 2 · 1! = 3 · 2 · 1 · (1-1)!
= 3 · 2 · 1 · 0! = 3 · 2 · 1 · 1
= 6
Ing. Mary Dunnia López
Ejemplo 1: Factorial Recursivo
ITERATIVO:
Int Factorial (int n )
{
Int ¡, res = 1;
For(¡=1;¡<=n;¡++ )
res = res*¡;
return (res);
}
RECURSIVO:
Int Factorial (int n )
{
If (n==0) return (1);
Return (n*Factorial (n-1));
}
Conclusión: un programa recursivo puede ser menos eficiente que uno
iterativo en cuanto a uso de memoria y velocidad de ejecución.
N es 3
FACTORIAL 3* FACTORIAL (2)
Retorno 6
N es 2
FACTORIAL 2* FACTORIAL (1)
Retorno 2
N es 1
FACTORIAL 1* FACTORIAL (0)
Retorno 1
N es 0
FACTORIAL 1
Retorno 1
FACT FACTORIAL (3)
Ciclo del Factorial Recursivo
Cree su propio algoritmo recursivo que retorne
el factorial de un número N.
Ing. Mary Dunnia López
void ConBin(TStringGrid *Grid,int n,int i,int &j){
int a;
if(n==0) {
Grid->ColCount=i;
j=0;
} else{
ConBin(Grid,(n/2),i+1,j);
Grid->Cells[j][0]=n%2;
j=j+1; }
}
Conversión de un numero en base 10 a sistema Binario.
Practica 2: Convertir a Binario
void GetBin(TStringGrid *Grid,int num){
int j=0;
ConBin(Grid,num,0,j);
}
Ing. Mary Dunnia López
1. ¿Cómo se puede definir el problema en términos de más
problemas?
En una lista de N elementos, se realiza la búsqueda entre los
elementos de la izquierda, si el elemento es menor que el central, o
de la derecha, si el elemento es mayor que el central.
2. ¿Qué instancias del problema harán de caso base?
- Cuando se encuentra el elemento  Este es igual que el
elemento central de la lista.
3. ¿Qué instancias del problema harán de caso base?
Llegar a una lista de un único componente.
Si el elemento central es el buscado, el elemento está en la posición
central. Si el elemento central no es el buscado, el elemento no está.
Conforme el problema se reduce de tamaño. Se alcanzará el caso
base.
En cada paso se va reduciendo la lista, al elegir la parte izquierda o
la parte derecha. Llegará un momento en que se pueda llegar a
buscar el elemento en una lista de un único componente.
Practica 2: Busqueda Binaria
Ing. Mary Dunnia López
Practica 2: Búsqueda Binaria
void busq_bin(int inicio, int final, vector <int> &cadena, int x) {
bool flag = false; int medio;
while((inicio <= final) && (! flag)) {
medio = (inicio + final) / 2;
if (x > cadena[medio]) inicio = medio + 1;
else if(x < cadena[medio]) final = medio - 1;
else flag = true;
}
if(flag)
cout << "Elemento encontrado en la posicion " << medio << endl;
else cout << "El elemento no esta en la lista" << endl;
}
Ing. Mary Dunnia López
Practica 2: Búsqueda Binaria
bool busqbin(int cadena[], int inicio, int final, int x){
static bool flag; bool res;
if(inicio > final)
return false;
else {
int m = (inicio + final)/2;
if(x < cadena[m])
res = busqbin(cadena, inicio, m-1, x);
else
if(x > cadena[m])
res = busqbin(cadena, m+1, final, x);
else
flag = true;
}
return flag;
}
/*Nota: Si se encuentra devuelve true, sino false*/
Ing. Mary Dunnia López
Ejercicio 1: Numeros
int ConvBin(Cardinal num){
int res=0;
if (num==0) {
res=0;
}else{
res=res+ConvBin(num/2)*10 + num%2;
}
return res;
}
 Convertir a binario
• Caso base  Si el numero a convertir es cero retonra cero
• Paso Recursivo  Si es mayor que cero intenta operaciones
ConvBin(num/2)*10 + num%2
Ing. Mary Dunnia López
Ejercicio 2: Cadenas
String InvCad(String cad){
String res;
if(cad.Length()==1){
return cad;
}else{
res=InvCad(cad.SubString(1,cad.Length()-1));
res=cad.LastChar()+res;
return res;
}
}
 Invertir una cadena
• Caso base  si la longitud de la cadena es 1 retorna la cadena
• Paso Recursivo  Si es mayor que 1, se intenta seguir retrocediendo hasta el
Primer caracter. Para luego al devolver la pila ir concatenando cada caracter
Ing. Mary Dunnia López
Serie de Fibonacci.
• Sucesión de números naturales en la que a partir del término 2 de la serie, cada número
(número de Fibonacci) es la suma de los dos anteriores:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, …
• El problema de calcular el número n de la serie se puede resolver de forma iterativa.
Ejercicio 3: Fibonacci
void main()
{
using namespace std;
double a, b, c;
a=0;
b=1;
cout<<"The Fibonacci Sequence!"<<endl<<endl;
cout<<a<<"t"<<b<<"t";
for(int count = 3; count<=20; count++) {
c=a+b;
cout<<c<<"t";
a=b;
b=c;
if(count % 5 == 0)
cout<<endl;
}
}
Ing. Mary Dunnia López
Serie de Fibonacci. recursiva
 El problema del cálculo del número n de la serie de. Fibonacci también admite una definición
recursiva.
Si n = 0 => Fib (n) = 0 Si n = 1 => Fib(n) = 1 Si n > 1 Fib(n) = Fib(n-1) + Fib(n-2)
int fibonaci(int num){
if(num<3){
return 1;
}else{
int x=fibonaci(num-1);
int y=fibonaci(num-2);
return x+y;
}
}
String num=InputBox("Enesimo termino Serie Fibonaci","Itroduzca un numero",0);
int val=StrToInt(num);
int res=fibonaci(val);
ShowMessage(res);
Ejercicio 3: Fibonacci
Ing. Mary Dunnia López
Ejercicio 3: Fibonacci Vent-Desv
• Para la llamada Fibonacci(5) el número de llamadas a realizar sería de 15.
• Un algoritmo iterativo con variables locales que almacenaran los cálculos
parciales sería más eficiente.
• Sólo necesitaría n iteraciones para calcular Fibonacci(n)
Ing. Mary Dunnia López
Ejercicio 4 : Vectores
Convertir un numero Entero a Binario.
void ConBin(TStringGrid *Grid,int n,int i,int &j){
int a;
if(n==0) {
Grid->ColCount=i;
j=0;
} else{
ConBin(Grid,(n/2),i+1,j);
Grid->Cells[j][0]=n%2;
j=j+1; }
}
void GetBin(TStringGrid *Grid,int num){
int j=0;
ConBin(Grid,num,0,j);
}
Ing. Mary Dunnia López
Ejercicio 5 : Matrices
void __fastcall TForm1::Rizo1Click(TObject *Sender){
int num=StrToInt(InputBox("Matriz 1","Introduzca Nro. de filas y columnas","1" )) ;
Grid1->RowCount=num;
Grid1->ColCount=num;
Grid1->FixedRows=0;
Grid1->FixedCols=0;
int mfil=num-1; int mcol=0;
MatrizS5(Grid1,0,0,mfil,mcol);
}
Generar la siguiente matriz
void MatrizS5(TStringGrid *Grid,int posf,int posc,int &max,int &min){
if ( posc>max) {
posc=min;
posf=posf+1;}
if(posf>max){
max=max-1;
min=min+1;
posf=min;
posc=min; }
if(min<max+1){
if(posf==max || posf==min || posc==max || posc==min)
Grid->Cells[posc][posf] =max+1;
if(posf==max || posf==min)
posc=posc+1;
else if(posc==min)posc=max; else posc=posc+1;
MatrizS5(Grid,posf,posc,max,min);
}
}
Ing. Mary Dunnia López
Para entender la recursividad, primero se
ha de entender la recursividad.
(anónimo)

Más contenido relacionado

La actualidad más candente

LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologJosé A. Alonso
 
automatas finitos
 automatas finitos automatas finitos
automatas finitosAnel Sosa
 
Ejercicios de búsqueda a Ciegas y Búsqueda informada
Ejercicios de búsqueda a Ciegas y Búsqueda informadaEjercicios de búsqueda a Ciegas y Búsqueda informada
Ejercicios de búsqueda a Ciegas y Búsqueda informadaHéctor Estigarribia
 
Análisis y diseño de sistemas sesion 11 - modelo de analisis
Análisis y diseño de sistemas   sesion 11 - modelo de analisisAnálisis y diseño de sistemas   sesion 11 - modelo de analisis
Análisis y diseño de sistemas sesion 11 - modelo de analisisGianfrancoEduardoBra
 
Tema 3: Tipos y clases en Haskell
Tema 3: Tipos y clases en HaskellTema 3: Tipos y clases en Haskell
Tema 3: Tipos y clases en HaskellJosé A. Alonso
 
Ejercicios en prolog
Ejercicios en prologEjercicios en prolog
Ejercicios en prologJeffoG92
 
Protocolos de enrutamiento
Protocolos de enrutamientoProtocolos de enrutamiento
Protocolos de enrutamientoJOHN BONILLA
 
Segunda forma normal
Segunda forma normalSegunda forma normal
Segunda forma normalITCV
 
Algoritmo prim
Algoritmo primAlgoritmo prim
Algoritmo primAbraham
 
Búsqueda no informada - Búsqueda bidireccional
Búsqueda no informada - Búsqueda  bidireccionalBúsqueda no informada - Búsqueda  bidireccional
Búsqueda no informada - Búsqueda bidireccionalLaura Del Pino Díaz
 
Enrutamiento con ospf y eigrp
Enrutamiento con ospf y eigrpEnrutamiento con ospf y eigrp
Enrutamiento con ospf y eigrp.. ..
 
Búsqueda Primero el Mejor
Búsqueda Primero el MejorBúsqueda Primero el Mejor
Búsqueda Primero el MejorTutor4uDev
 
Sistemas Numericos y conversiones(Powerpoint aplicaciones m. 1)
Sistemas Numericos y conversiones(Powerpoint aplicaciones m. 1)Sistemas Numericos y conversiones(Powerpoint aplicaciones m. 1)
Sistemas Numericos y conversiones(Powerpoint aplicaciones m. 1)guffygram
 

La actualidad más candente (20)

Backtracking
BacktrackingBacktracking
Backtracking
 
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con PrologLI-T12: LI2011-12: Introducción a la programación lógica con Prolog
LI-T12: LI2011-12: Introducción a la programación lógica con Prolog
 
automatas finitos
 automatas finitos automatas finitos
automatas finitos
 
33 col2 301405
33 col2 30140533 col2 301405
33 col2 301405
 
Ejercicios de búsqueda a Ciegas y Búsqueda informada
Ejercicios de búsqueda a Ciegas y Búsqueda informadaEjercicios de búsqueda a Ciegas y Búsqueda informada
Ejercicios de búsqueda a Ciegas y Búsqueda informada
 
Análisis y diseño de sistemas sesion 11 - modelo de analisis
Análisis y diseño de sistemas   sesion 11 - modelo de analisisAnálisis y diseño de sistemas   sesion 11 - modelo de analisis
Análisis y diseño de sistemas sesion 11 - modelo de analisis
 
Listas
ListasListas
Listas
 
Tema 3: Tipos y clases en Haskell
Tema 3: Tipos y clases en HaskellTema 3: Tipos y clases en Haskell
Tema 3: Tipos y clases en Haskell
 
Ejercicios en prolog
Ejercicios en prologEjercicios en prolog
Ejercicios en prolog
 
Protocolos de enrutamiento
Protocolos de enrutamientoProtocolos de enrutamiento
Protocolos de enrutamiento
 
Segunda forma normal
Segunda forma normalSegunda forma normal
Segunda forma normal
 
Estructura de Datos - Unidad II Recursividad
Estructura de Datos - Unidad II RecursividadEstructura de Datos - Unidad II Recursividad
Estructura de Datos - Unidad II Recursividad
 
Algoritmo prim
Algoritmo primAlgoritmo prim
Algoritmo prim
 
Búsqueda no informada - Búsqueda bidireccional
Búsqueda no informada - Búsqueda  bidireccionalBúsqueda no informada - Búsqueda  bidireccional
Búsqueda no informada - Búsqueda bidireccional
 
Algoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap SortAlgoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap Sort
 
Problema de las 8 reinas
Problema de las 8 reinasProblema de las 8 reinas
Problema de las 8 reinas
 
Enrutamiento con ospf y eigrp
Enrutamiento con ospf y eigrpEnrutamiento con ospf y eigrp
Enrutamiento con ospf y eigrp
 
Búsqueda Primero el Mejor
Búsqueda Primero el MejorBúsqueda Primero el Mejor
Búsqueda Primero el Mejor
 
Algoritmo Bully
Algoritmo BullyAlgoritmo Bully
Algoritmo Bully
 
Sistemas Numericos y conversiones(Powerpoint aplicaciones m. 1)
Sistemas Numericos y conversiones(Powerpoint aplicaciones m. 1)Sistemas Numericos y conversiones(Powerpoint aplicaciones m. 1)
Sistemas Numericos y conversiones(Powerpoint aplicaciones m. 1)
 

Similar a Ordenar lista recursivamente (20)

Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01Recursividad 100329105433-phpapp01
Recursividad 100329105433-phpapp01
 
II Unidad
II UnidadII Unidad
II Unidad
 
II Unidad
II UnidadII Unidad
II Unidad
 
Recursividad.pdf
Recursividad.pdfRecursividad.pdf
Recursividad.pdf
 
03 tda1 t2018
03 tda1 t201803 tda1 t2018
03 tda1 t2018
 
Recursividad.pdf
Recursividad.pdfRecursividad.pdf
Recursividad.pdf
 
Recursividad
RecursividadRecursividad
Recursividad
 
Recursividad
RecursividadRecursividad
Recursividad
 
Recursividad
RecursividadRecursividad
Recursividad
 
Recursividad
RecursividadRecursividad
Recursividad
 
Algoritmos recursivos
Algoritmos recursivosAlgoritmos recursivos
Algoritmos recursivos
 
Recursividad
RecursividadRecursividad
Recursividad
 
recursividad EN PROGRAMACION ORIENTADA .pptx
recursividad EN PROGRAMACION ORIENTADA .pptxrecursividad EN PROGRAMACION ORIENTADA .pptx
recursividad EN PROGRAMACION ORIENTADA .pptx
 
recursividad.pptx
recursividad.pptxrecursividad.pptx
recursividad.pptx
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
Unidad 2
Unidad 2Unidad 2
Unidad 2
 
2 clase 1_recursividad
2 clase 1_recursividad2 clase 1_recursividad
2 clase 1_recursividad
 
Recursividad
RecursividadRecursividad
Recursividad
 
recursividad
recursividadrecursividad
recursividad
 
Recursividad
RecursividadRecursividad
Recursividad
 

Más de Mary Dunnia Lopez N. (20)

Cap2.1
Cap2.1Cap2.1
Cap2.1
 
Cap7 2 matrices
Cap7 2 matricesCap7 2 matrices
Cap7 2 matrices
 
Cap7 1 vectores
Cap7 1 vectoresCap7 1 vectores
Cap7 1 vectores
 
Guia lab1
Guia lab1Guia lab1
Guia lab1
 
Cap4.2 visual basic.net
Cap4.2 visual basic.netCap4.2 visual basic.net
Cap4.2 visual basic.net
 
Cap5 1.1 tutor2 la_variable
Cap5 1.1 tutor2 la_variableCap5 1.1 tutor2 la_variable
Cap5 1.1 tutor2 la_variable
 
Cap5 1.4 tutor3 algoritmos repetititvos
Cap5 1.4 tutor3 algoritmos repetititvosCap5 1.4 tutor3 algoritmos repetititvos
Cap5 1.4 tutor3 algoritmos repetititvos
 
Cap5 1.3 tutor3 algoritmos condicionales
Cap5 1.3 tutor3 algoritmos condicionalesCap5 1.3 tutor3 algoritmos condicionales
Cap5 1.3 tutor3 algoritmos condicionales
 
Cap5 1.2 tutor2 algoritmos secuenciales
Cap5 1.2 tutor2 algoritmos secuencialesCap5 1.2 tutor2 algoritmos secuenciales
Cap5 1.2 tutor2 algoritmos secuenciales
 
Vectores
VectoresVectores
Vectores
 
Matrices
MatricesMatrices
Matrices
 
Cadenas
CadenasCadenas
Cadenas
 
Cap1.3 tutor recursividad matriz
Cap1.3 tutor recursividad   matrizCap1.3 tutor recursividad   matriz
Cap1.3 tutor recursividad matriz
 
Cap1.2 tutor recursividad vectores
Cap1.2 tutor recursividad   vectoresCap1.2 tutor recursividad   vectores
Cap1.2 tutor recursividad vectores
 
Cap30 intro
Cap30 introCap30 intro
Cap30 intro
 
Cap32 rep num
Cap32 rep numCap32 rep num
Cap32 rep num
 
Cap31 sist num
Cap31 sist numCap31 sist num
Cap31 sist num
 
Cap2
Cap2Cap2
Cap2
 
Contar digitos
Contar digitosContar digitos
Contar digitos
 
Cap0 2
Cap0 2Cap0 2
Cap0 2
 

Último

Buenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria FarmaceuticaBuenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria FarmaceuticaMarco Camacho
 
Amor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdfAmor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdfAlejandrino Halire Ccahuana
 
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...Martin M Flynn
 
Explicación del Modelo de Stephen Toulmin para elaborar argumentos
Explicación del  Modelo de Stephen Toulmin para elaborar argumentosExplicación del  Modelo de Stephen Toulmin para elaborar argumentos
Explicación del Modelo de Stephen Toulmin para elaborar argumentosINESDVERA
 
CALCULADORA CIENTIFICA - ANALISIS DE ARTEFACTOS
CALCULADORA CIENTIFICA - ANALISIS DE ARTEFACTOSCALCULADORA CIENTIFICA - ANALISIS DE ARTEFACTOS
CALCULADORA CIENTIFICA - ANALISIS DE ARTEFACTOSdarlingreserved
 
ENSEÑAR ACUIDAR EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
ENSEÑAR ACUIDAR  EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.ENSEÑAR ACUIDAR  EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
ENSEÑAR ACUIDAR EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.karlazoegarciagarcia
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejormrcrmnrojasgarcia
 
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Carol Andrea Eraso Guerrero
 
Descripción Und Curso Inf.Médica - Diseño ExpAprendizaje2.pdf
Descripción Und Curso Inf.Médica - Diseño ExpAprendizaje2.pdfDescripción Und Curso Inf.Médica - Diseño ExpAprendizaje2.pdf
Descripción Und Curso Inf.Médica - Diseño ExpAprendizaje2.pdfCarol Andrea Eraso Guerrero
 
Presentacionde Prueba 2024 dsdasdasdsadsadsadsadasdasdsadsa
Presentacionde Prueba 2024 dsdasdasdsadsadsadsadasdasdsadsaPresentacionde Prueba 2024 dsdasdasdsadsadsadsadasdasdsadsa
Presentacionde Prueba 2024 dsdasdasdsadsadsadsadasdasdsadsaFarid Abud
 
5º SOY LECTOR PART1- MD EDUCATIVO.pdfde
5º SOY LECTOR PART1- MD  EDUCATIVO.pdfde5º SOY LECTOR PART1- MD  EDUCATIVO.pdfde
5º SOY LECTOR PART1- MD EDUCATIVO.pdfdeBelnRosales2
 
historieta materia de ecologías producto
historieta materia de ecologías productohistorieta materia de ecologías producto
historieta materia de ecologías productommartinezmarquez30
 
Descripción del Proceso de corte y soldadura
Descripción del Proceso de corte y soldaduraDescripción del Proceso de corte y soldadura
Descripción del Proceso de corte y soldaduraJose Sanchez
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacionviviantorres91
 
Biografía del General Eloy Alfaro Delgado
Biografía del General Eloy Alfaro DelgadoBiografía del General Eloy Alfaro Delgado
Biografía del General Eloy Alfaro DelgadoJosé Luis Palma
 
NIVELES TRÓFICOS DE UN ECOSISTEMA (ecologia)
NIVELES TRÓFICOS DE UN ECOSISTEMA (ecologia)NIVELES TRÓFICOS DE UN ECOSISTEMA (ecologia)
NIVELES TRÓFICOS DE UN ECOSISTEMA (ecologia)LizNava123
 

Último (20)

Sesión ¿Amor o egoísmo? Esa es la cuestión
Sesión  ¿Amor o egoísmo? Esa es la cuestiónSesión  ¿Amor o egoísmo? Esa es la cuestión
Sesión ¿Amor o egoísmo? Esa es la cuestión
 
Buenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria FarmaceuticaBuenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria Farmaceutica
 
Amor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdfAmor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdf
 
Unidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIUUnidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIU
 
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
DIGNITAS INFINITA - DIGNIDAD HUMANA; Declaración del dicasterio para la doctr...
 
Explicación del Modelo de Stephen Toulmin para elaborar argumentos
Explicación del  Modelo de Stephen Toulmin para elaborar argumentosExplicación del  Modelo de Stephen Toulmin para elaborar argumentos
Explicación del Modelo de Stephen Toulmin para elaborar argumentos
 
CALCULADORA CIENTIFICA - ANALISIS DE ARTEFACTOS
CALCULADORA CIENTIFICA - ANALISIS DE ARTEFACTOSCALCULADORA CIENTIFICA - ANALISIS DE ARTEFACTOS
CALCULADORA CIENTIFICA - ANALISIS DE ARTEFACTOS
 
ENSEÑAR ACUIDAR EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
ENSEÑAR ACUIDAR  EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.ENSEÑAR ACUIDAR  EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
ENSEÑAR ACUIDAR EL MEDIO AMBIENTE ES ENSEÑAR A VALORAR LA VIDA.
 
LOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejorLOS AMBIENTALISTAS todo por un mundo mejor
LOS AMBIENTALISTAS todo por un mundo mejor
 
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
 
Descripción Und Curso Inf.Médica - Diseño ExpAprendizaje2.pdf
Descripción Und Curso Inf.Médica - Diseño ExpAprendizaje2.pdfDescripción Und Curso Inf.Médica - Diseño ExpAprendizaje2.pdf
Descripción Und Curso Inf.Médica - Diseño ExpAprendizaje2.pdf
 
Presentacionde Prueba 2024 dsdasdasdsadsadsadsadasdasdsadsa
Presentacionde Prueba 2024 dsdasdasdsadsadsadsadasdasdsadsaPresentacionde Prueba 2024 dsdasdasdsadsadsadsadasdasdsadsa
Presentacionde Prueba 2024 dsdasdasdsadsadsadsadasdasdsadsa
 
5º SOY LECTOR PART1- MD EDUCATIVO.pdfde
5º SOY LECTOR PART1- MD  EDUCATIVO.pdfde5º SOY LECTOR PART1- MD  EDUCATIVO.pdfde
5º SOY LECTOR PART1- MD EDUCATIVO.pdfde
 
historieta materia de ecologías producto
historieta materia de ecologías productohistorieta materia de ecologías producto
historieta materia de ecologías producto
 
Descripción del Proceso de corte y soldadura
Descripción del Proceso de corte y soldaduraDescripción del Proceso de corte y soldadura
Descripción del Proceso de corte y soldadura
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacion
 
Biografía del General Eloy Alfaro Delgado
Biografía del General Eloy Alfaro DelgadoBiografía del General Eloy Alfaro Delgado
Biografía del General Eloy Alfaro Delgado
 
NIVELES TRÓFICOS DE UN ECOSISTEMA (ecologia)
NIVELES TRÓFICOS DE UN ECOSISTEMA (ecologia)NIVELES TRÓFICOS DE UN ECOSISTEMA (ecologia)
NIVELES TRÓFICOS DE UN ECOSISTEMA (ecologia)
 
Acuerdo segundo periodo - Grado Noveno.pptx
Acuerdo segundo periodo - Grado Noveno.pptxAcuerdo segundo periodo - Grado Noveno.pptx
Acuerdo segundo periodo - Grado Noveno.pptx
 
AO TEATRO, COM ANTÓNIO MOTA! _
AO TEATRO, COM ANTÓNIO MOTA!             _AO TEATRO, COM ANTÓNIO MOTA!             _
AO TEATRO, COM ANTÓNIO MOTA! _
 

Ordenar lista recursivamente

  • 1. Ing. Mary Lopez Programacion II Iterar es Humano Recursividad es Divino Universidad Autónoma Gabriel Rene Moreno FICCT Semestre I/2018
  • 2. Ing. Mary Dunnia López Contenido Introducción1 Principios de la Inducción Completa2 Estrategias para Procesos Recusivos3 Ejercicios4
  • 3.
  • 4. Ing. Mary Dunnia López Definición - Es una Técnica que permite que una función se llame a si misma. Recursividad Definition - Un algoritmo es recursivo si al estar encapsulado en una función es llamado desde la misma función por lo menos 1 vez. Recursión va ligado a repetición
  • 5. Ing. Mary Dunnia López 1.1 Validez del algoritmo recursivo Caso Base • Evita que el algoritmo sea infinito. • El problema puede resolverse sin tener que hacer uso una nueva llamada a si mismo. Al menos 2 elementos Paso Recursivo  Relaciona el resultado del algoritmo en base a los resultados de casos mas simples.  Se hacen llamadas a la misma función pero cada vez mas próximas al caso base.
  • 6. Ing. Mary Dunnia López 1.2 Utilidad de la Recursividad Un Funcion se llama a si misma Codificación simple y corta Existe una sobrecarga asociada con las llamadas a sub algoritmos Algoritmo Recursivo Por que usar ?
  • 7. Ing. Mary Dunnia López 1.3 ¿Cuándo usar recursividad?  Es una técnica potente de programación que permite resolver problemas complejos en forma simple elegante y clara.  Sin Embargo:  Sera la ultima solución a intentar en caso que los procesos iterativos no funcionen.  El uso de recursividad únicamente cuando no haya solución iterativa.  Si analizamos en el caso factorial  Existen algoritmos complejos se codifican mas fácil mediante métodos recursivos. RECURSIVO Int Factorial (int n ) { If (n==0) return (1); Return (n*Factorial (n-1)); } //Almacena : datos y direcciones ITERATIVO: Int Factorial (int n ) { Int a, res = 1; For(a=1; a<=n; a++ ) res = res*a; return (res); } //Almacena solo datos
  • 8. Ing. Mary Dunnia López 1.4 Tipos de recursividad  Simple  Si cumple que tiene una sola llama a si misma. Se lo puede convertir en algoritmo iterativo. Por ejemplo: El factorial.  Multiple --> Varias llamadas a si misma por ejemplo: Fibonacci  Anidada --> Es cuando alguna llamada recursiva recibe como parámetro a una llamada recursiva, su complejidad en término de llamadas recursivas resultará mucho más difícil de calcular  Cruzada --> son algoritmos donde una función provoca una llamada a si misma de forma indirecta, a través de otras funciones. int par (int n){ if( n==0) return (1); else return (impar(n-1)); } int impar (int n){ if( n==0) return (0); else return (par (n-1)); }
  • 9.
  • 10. Ing. Mary Dunnia López La caída de dominós en cadena ilustra la idea del principio de inducción: si el primer domino cae, y si cualquiera al caer hace caer al siguiente, entonces todos caen. (Tomado del libro Discrete mathematics" de K. Rosen)
  • 11. Ing. Mary Dunnia López  Para entender recursividad se debe conocer un poco de los tipos inductivos, aplicando la inducción matemática. Un tipo inductivo es aquel que tiene una cantidad variable de elementos, y que si cierta condición se cumple para un elemento, entonces es posible demostrar que se cumple para todos los demás.  Si en una fila muy larga de personas alguien dice un secreto a otra esta automáticamente se lo dice a la persona que está a lado de ella. ¿Se enterarán entonces todas las personas de la fila del secreto contado?  Una primer persona se lo dice a la segunda, esta al recibir el mensaje se lo dice a la tercera, esta se lo dirá a la cuarta y así sucesivamente hasta llegar al final de la fila. Luego la propiedad se cumple para todos los que estén en la fila.  El principio de inducción completa parte de un esquema proposicional ¿ Qué es esquema proporcional ?
  • 12. Ing. Mary Dunnia López  Una proposición es una oración de la que se puede decir que es falso o verdadero.  En esta oración figura una variable, la cual al ser reemplazada por un valor de su dominio la convierten en una proposición: P1[x] = “Dos es mayor que x", x E {1,2,3,4} P2[n] = n < 2 , n E {3,4,5,6,7} P3[n] = “La suma de los primeros n números naturales es igual al producto de N por su sucesor dividido entre dos", n E |N P4[n] = 1+2+3+…+n= n*(n+1)/2, n E |N 2.1 Esquema proposicional
  • 13. Ing. Mary Dunnia López 2.2 El primer PIC  Sea P[n] un esquema proposicional sobre los Naturales, se puede demostrar que P[n] es válido si se logra probar que:  P[1] es verdadero  Es el primer valor del dominio  Suponiendo que P[n-1] (hipótesis) es verdadero  Todas las proposiciones menos una. La penúltima proposición  Probar que P[n] también es verdadero  Caso Base.  Es el proceso para el primer valor de la variable de recursión. Por lo general: • Si es una lista  Lista vacía • Debe ser la nada, lo vacío, lo nulo  0 • Algún otro número  1  Caso General  Es el proceso que hace lo que se necesita, por lo que se lo utiliza pero con un valor menos (P[n-1]).
  • 14. Ing. Mary Dunnia López 2.3 El Segundo PIC en recursión  Caso Base.  Debe resolver el problema para los primeros m valores del dominio de la variable de recursión.  Caso General  Es el proceso hace lo que se necesita, pero lo hace para K (P[k]) , usando éste proceso debe hacer que funcione para N (P[n]). • Para k=n-1  M=1 (se necesita mínimo un caso base) • Para k=n-2  M=2 (se necesita al menos 2 casos base) Sea P[n] un esquema proposicional sobre los Naturales, se puede demostrar que P[n] es válido si se puede probar que: a) P[1]^P[2] ^.. ^P[m]  Es verdadero b) Suponiendo P[k] (hipótesis)  Es verdadero. Donde m<k<n c) Probar que P[n] también lo es.
  • 15.
  • 16.  Dos estrategias de resolución de problemas recursivos:  Divide y vencerás : Divide el problema de tamaño n en problemas más pequeños cada uno de los cuales es similar al original pero de menor tamaño. • Si se llega a una solución de los sub-problemas, se podrá construir de forma sencilla una solución al problema general. • Cada uno de esos sub-problemas se podrá resolver de forma directa (caso base) o dividiéndolos en problemas más pequeños mediante la recursividad.  Backtracking = Fuerza Bruta = Vuelta Atras. Divide la solución en pasos, en cada uno de los cuales hay una serie de opciones que ha que probar de forma sistemática. En cada paso se busca una posibilidad o solución o solución aceptable. • Si se encuentra una solución valida pasa a decidir el paso siguiente. • Si no se encuentra una solución aceptable, se retrocede hasta la última solución aceptable encontrada y se elige una opción distinta a la anterior. La recursividad se utiliza para poder retroceder hasta encontrar una solución aceptable. • Ejemplos: Juegos de tablero, laberintos, etc.
  • 17. Ing. Mary Dunnia López 3.1 Definición de Procesos Recursivos 1. ¿Cuál es la variable de recursión?  Es lo primero que hay que identificar  Indica cuantas veces se repite la acción principal del proceso. 2. ¿Cuál es el dominio de la variable de recursión? • El conjunto de números naturales de 0 a N. 3. Caso Base Resolver el problema para el primer valor del dominio de la variable de recursión (Definido en el Paso 2) 4. Paso Recursivo  Si ya existe un proceso que hace lo que se necesita, en este paso se lo LLAMA disminuyendo o aumentado el numero de elementos N para que se acerque al CASO BASE. Este paso debe completar lo que falte.
  • 18. Ing. Mary Dunnia López 3.2 Resolución de Procesos Recursivos Resolución de problemas recursivos. Para hallar la solución recursiva a un problema podemos hacernos tres preguntas: 1. ¿Cómo se puede definir el problema en términos de uno o más ? • Problemas más pequeños del mismo tipo que el original. 2. ¿Qué instancias del problema harán de caso base? • Conforme el problema se reduce de tamaño, se alcanzará el caso base 3. ¿Cómo se usa la solución del caso base para construir una solución • Alcanzado el caso base, determinar como ahora lograr la solución final.
  • 19. Ing. Mary Dunnia López 3.3 Pasos para crear un AR Escriba un «IF» a. caso Base  Donde la función no se llama a si misma. Simple = No se necesita llamada recursiva (no hay repetición) Tal vez deba almacenar el resultado en una variable. Escriba un «ELSE» a. Paso Recursivo  Donde la función se llama a si misma Es la próxima entrada/estado Esta deberá aproximarse cada vez mas al caso base Asuma que la llamada recursiva funciona: a. Pregúntese que hace el algoritmo? b. Pregúntese como ayuda en la solución del problema ?
  • 20. Ing. Mary Dunnia López 3.1.4 Base Para escribir el AR IF (pregunta por el caso base) { //Caso Base } else { // Paso Recursivo }
  • 21. Ing. Mary Dunnia López Ejemplo 1: Factorial Recursivo  Definición recurrente de la función factorial n! Si n=0 1  Caso Base N! = Si n>=1 n*(n-1)!  Paso recursivo 3! = 3 · (3-1)! = 3 · 2! = 3 · 2 · (2-1)! = 3 · 2 · 1! = 3 · 2 · 1 · (1-1)! = 3 · 2 · 1 · 0! = 3 · 2 · 1 · 1 = 6
  • 22. Ing. Mary Dunnia López Ejemplo 1: Factorial Recursivo ITERATIVO: Int Factorial (int n ) { Int ¡, res = 1; For(¡=1;¡<=n;¡++ ) res = res*¡; return (res); } RECURSIVO: Int Factorial (int n ) { If (n==0) return (1); Return (n*Factorial (n-1)); } Conclusión: un programa recursivo puede ser menos eficiente que uno iterativo en cuanto a uso de memoria y velocidad de ejecución.
  • 23. N es 3 FACTORIAL 3* FACTORIAL (2) Retorno 6 N es 2 FACTORIAL 2* FACTORIAL (1) Retorno 2 N es 1 FACTORIAL 1* FACTORIAL (0) Retorno 1 N es 0 FACTORIAL 1 Retorno 1 FACT FACTORIAL (3) Ciclo del Factorial Recursivo
  • 24. Cree su propio algoritmo recursivo que retorne el factorial de un número N.
  • 25. Ing. Mary Dunnia López void ConBin(TStringGrid *Grid,int n,int i,int &j){ int a; if(n==0) { Grid->ColCount=i; j=0; } else{ ConBin(Grid,(n/2),i+1,j); Grid->Cells[j][0]=n%2; j=j+1; } } Conversión de un numero en base 10 a sistema Binario. Practica 2: Convertir a Binario void GetBin(TStringGrid *Grid,int num){ int j=0; ConBin(Grid,num,0,j); }
  • 26. Ing. Mary Dunnia López 1. ¿Cómo se puede definir el problema en términos de más problemas? En una lista de N elementos, se realiza la búsqueda entre los elementos de la izquierda, si el elemento es menor que el central, o de la derecha, si el elemento es mayor que el central. 2. ¿Qué instancias del problema harán de caso base? - Cuando se encuentra el elemento  Este es igual que el elemento central de la lista. 3. ¿Qué instancias del problema harán de caso base? Llegar a una lista de un único componente. Si el elemento central es el buscado, el elemento está en la posición central. Si el elemento central no es el buscado, el elemento no está. Conforme el problema se reduce de tamaño. Se alcanzará el caso base. En cada paso se va reduciendo la lista, al elegir la parte izquierda o la parte derecha. Llegará un momento en que se pueda llegar a buscar el elemento en una lista de un único componente. Practica 2: Busqueda Binaria
  • 27. Ing. Mary Dunnia López Practica 2: Búsqueda Binaria void busq_bin(int inicio, int final, vector <int> &cadena, int x) { bool flag = false; int medio; while((inicio <= final) && (! flag)) { medio = (inicio + final) / 2; if (x > cadena[medio]) inicio = medio + 1; else if(x < cadena[medio]) final = medio - 1; else flag = true; } if(flag) cout << "Elemento encontrado en la posicion " << medio << endl; else cout << "El elemento no esta en la lista" << endl; }
  • 28. Ing. Mary Dunnia López Practica 2: Búsqueda Binaria bool busqbin(int cadena[], int inicio, int final, int x){ static bool flag; bool res; if(inicio > final) return false; else { int m = (inicio + final)/2; if(x < cadena[m]) res = busqbin(cadena, inicio, m-1, x); else if(x > cadena[m]) res = busqbin(cadena, m+1, final, x); else flag = true; } return flag; } /*Nota: Si se encuentra devuelve true, sino false*/
  • 29.
  • 30. Ing. Mary Dunnia López Ejercicio 1: Numeros int ConvBin(Cardinal num){ int res=0; if (num==0) { res=0; }else{ res=res+ConvBin(num/2)*10 + num%2; } return res; }  Convertir a binario • Caso base  Si el numero a convertir es cero retonra cero • Paso Recursivo  Si es mayor que cero intenta operaciones ConvBin(num/2)*10 + num%2
  • 31. Ing. Mary Dunnia López Ejercicio 2: Cadenas String InvCad(String cad){ String res; if(cad.Length()==1){ return cad; }else{ res=InvCad(cad.SubString(1,cad.Length()-1)); res=cad.LastChar()+res; return res; } }  Invertir una cadena • Caso base  si la longitud de la cadena es 1 retorna la cadena • Paso Recursivo  Si es mayor que 1, se intenta seguir retrocediendo hasta el Primer caracter. Para luego al devolver la pila ir concatenando cada caracter
  • 32. Ing. Mary Dunnia López Serie de Fibonacci. • Sucesión de números naturales en la que a partir del término 2 de la serie, cada número (número de Fibonacci) es la suma de los dos anteriores: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, … • El problema de calcular el número n de la serie se puede resolver de forma iterativa. Ejercicio 3: Fibonacci void main() { using namespace std; double a, b, c; a=0; b=1; cout<<"The Fibonacci Sequence!"<<endl<<endl; cout<<a<<"t"<<b<<"t"; for(int count = 3; count<=20; count++) { c=a+b; cout<<c<<"t"; a=b; b=c; if(count % 5 == 0) cout<<endl; } }
  • 33. Ing. Mary Dunnia López Serie de Fibonacci. recursiva  El problema del cálculo del número n de la serie de. Fibonacci también admite una definición recursiva. Si n = 0 => Fib (n) = 0 Si n = 1 => Fib(n) = 1 Si n > 1 Fib(n) = Fib(n-1) + Fib(n-2) int fibonaci(int num){ if(num<3){ return 1; }else{ int x=fibonaci(num-1); int y=fibonaci(num-2); return x+y; } } String num=InputBox("Enesimo termino Serie Fibonaci","Itroduzca un numero",0); int val=StrToInt(num); int res=fibonaci(val); ShowMessage(res); Ejercicio 3: Fibonacci
  • 34. Ing. Mary Dunnia López Ejercicio 3: Fibonacci Vent-Desv • Para la llamada Fibonacci(5) el número de llamadas a realizar sería de 15. • Un algoritmo iterativo con variables locales que almacenaran los cálculos parciales sería más eficiente. • Sólo necesitaría n iteraciones para calcular Fibonacci(n)
  • 35. Ing. Mary Dunnia López Ejercicio 4 : Vectores Convertir un numero Entero a Binario. void ConBin(TStringGrid *Grid,int n,int i,int &j){ int a; if(n==0) { Grid->ColCount=i; j=0; } else{ ConBin(Grid,(n/2),i+1,j); Grid->Cells[j][0]=n%2; j=j+1; } } void GetBin(TStringGrid *Grid,int num){ int j=0; ConBin(Grid,num,0,j); }
  • 36. Ing. Mary Dunnia López Ejercicio 5 : Matrices void __fastcall TForm1::Rizo1Click(TObject *Sender){ int num=StrToInt(InputBox("Matriz 1","Introduzca Nro. de filas y columnas","1" )) ; Grid1->RowCount=num; Grid1->ColCount=num; Grid1->FixedRows=0; Grid1->FixedCols=0; int mfil=num-1; int mcol=0; MatrizS5(Grid1,0,0,mfil,mcol); } Generar la siguiente matriz
  • 37. void MatrizS5(TStringGrid *Grid,int posf,int posc,int &max,int &min){ if ( posc>max) { posc=min; posf=posf+1;} if(posf>max){ max=max-1; min=min+1; posf=min; posc=min; } if(min<max+1){ if(posf==max || posf==min || posc==max || posc==min) Grid->Cells[posc][posf] =max+1; if(posf==max || posf==min) posc=posc+1; else if(posc==min)posc=max; else posc=posc+1; MatrizS5(Grid,posf,posc,max,min); } }
  • 38. Ing. Mary Dunnia López Para entender la recursividad, primero se ha de entender la recursividad. (anónimo)

Notas del editor

  1. Es una estrategia que corresponde al dicho divide y venceras.
  2. Ir construyendo la solución en cada llamada recursiva.
  3. Es una estrategia que corresponde al dicho divide y venceras.
  4. int factorial(int x) { if (x > -1 && x < 2) return 1; // Cuando -1 < x < 2 devueve 1  0! = 1 y 1! = 1 else if (x < 0) return 0; // Error no existe factorial de números negativos return x * factorial(x - 1); // Si x >= 2 devueve el producto de x por el factorial de x - 1 }
  5. inicio  Es la primera posición, en principio será cero al llamar la función final  Es la última posición valida del vector cadena  Vector de enteros que contiene la lista donde se buscara x  Es el valor buscado