0% encontró este documento útil (0 votos)
62 vistas5 páginas

Ejercicios de Recursividad en Algoritmos

El documento presenta ejercicios sobre recursividad. Explica cómo encontrar el máximo común divisor de dos números de forma recursiva mediante divisiones sucesivas. También explica cómo buscar de forma recursiva un valor en un vector, devolviendo la posición donde se encuentra o 0 si no está. Por último, propone varios ejercicios para desarrollar subprogramas recursivos en pseudocódigo.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
62 vistas5 páginas

Ejercicios de Recursividad en Algoritmos

El documento presenta ejercicios sobre recursividad. Explica cómo encontrar el máximo común divisor de dos números de forma recursiva mediante divisiones sucesivas. También explica cómo buscar de forma recursiva un valor en un vector, devolviendo la posición donde se encuentra o 0 si no está. Por último, propone varios ejercicios para desarrollar subprogramas recursivos en pseudocódigo.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UTN – FRM – Ing.

en Sistemas de Información EJERCICIOS OPTATIVOS


Algoritmos y Estructuras de Datos
Ciclo lectivo 2020- Trabajos Prácticos
Clase N°10-UT7- Página 1 de 5

CLASE Nº10: Resolución de problemas ingenieriles


RECURSIVIDAD (UT7)

OBJETIVO: Que los alumnos construyan subprogramas recursivos; comprendiendo la naturaleza recursiva
de algunos problemas y dominando los conceptos de relación de recurrencia y casos base.

Consigna 1: se interpreta y resuelven los siguientes ejercicios:


EJERCICIO RESUELTO
“Dados dos números; encontrar el máximo común divisor”. Ejemplo: 32 y 12; resultado: 4”

 Elaborado por Susana Oviedo, Adriana José y Eugenia Alfonso 


Delimitación del problema:

P: ¿Qué es el máximo común divisor?. R: Es el mayor número que puede dividir a dos números
dados con cociente entero y resto cero.
P: ¿Cómo deben ser los números?. R: Enteros positivos.

Análisis del problema:

ENTRADAS:
Dos números enteros y positivos.

ALGORITMO:
Se resuelve a través de divisiones sucesivas, donde en cada llamada recursiva los
parámetros son el divisor en primer lugar y el resto en segundo lugar.
La recursión termina cuando el resto es cero y el máximo común divisor es el último
divisor.

SALIDA:
El máximo común divisor de los dos números ingresados.

PSEUDOCODIGO
PROGRAMA ppal_mcd
//SUBPROGRAMAS
FUNCION mcd (numA, numB: ENTERO): ENTERO VAR cociente, resto: ENTERO
SI (numA < numB) ENTONCES
mcd = mcd(numB, numA)
SINO
cociente= numA/numB
resto = numA – numB * cociente
SI (resto == 0) ENTONCES
mcd = numB
SINO
mcd= mcd(numB, resto)
FINSI
FINSI
// O se podría haber guardado en una variable local //para luego devolver ese valor en la función RETORNO

//PROGRAMA PRINCIPAL
INICIO
VAR numero1, numero2, resultado: ENTERO
//Ingreso los números
REPETIR
ESCRIBIR(“Ingrese un número mayor que cero: ”)
UTN – FRM – Ing. en Sistemas de Información EJERCICIOS OPTATIVOS
Algoritmos y Estructuras de Datos
Ciclo lectivo 2020- Trabajos Prácticos
Clase N°10-UT7- Página 2 de 5

LEER(numero1)
HASTA QUE (numero1 > 0)
REPETIR
ESCRIBIR(“Ingrese un segundo número mayor que cero: ”)
LEER(numero2)
HASTA QUE (numero2 > 0)

resultado=mcd(numero1,numero2)
ESCRIBIR(" RESULTADO ")
ESCRIBIR(“El máximo común divisor es:”, resultado)
FINPROGRAMA

 Elaborado por Susana Oviedo, Adriana José y Eugenia Alfonso 


PROGRAMA
#include <iostream>
using namespace std;

//Subprogramas
int mcd (int numA, int numB) {
//Funcion que encuentra el maximo comun divisor
int cociente, resto, minComMul;
//Realiza el intercambio en caso de ser necesario
if (numA < numB)
minComMul = mcd(numB, numA);
else
{ cociente=numA/numB;
resto= numA - numB * cociente;
if (resto == 0)
minComMul= numB;
else
minComMul= mcd(numB, resto);
}
return minComMul;
} //Retorno

int main(int argc, char *argv[]) {

//Declaracion de variables
int Numero1, Numero2, resultado;

//Programa principal
//INICIO

//Ingreso de datos
do{
cout<<"Ingrese un numero mayor que cero: ";
cin>>Numero1;
} while (Numero1<0);

do{
cout<<"Ingrese un segundo numero mayor que cero: ";
cin>>Numero2;
UTN – FRM – Ing. en Sistemas de Información EJERCICIOS OPTATIVOS
Algoritmos y Estructuras de Datos
Ciclo lectivo 2020- Trabajos Prácticos
Clase N°10-UT7- Página 3 de 5

} while (Numero2<0);
//Muestro el resultado que devuelve la función
cout<<"-----------------------------"<<endl;
cout<<" RESULTADO "<<endl;
cout<<"-----------------------------"<<endl;
cout<<" "<<endl;

resultado= mcd(Numero1, Numero2);


cout<<"El maximo comun divisor es: "<<resultado<<endl;

return 0; //FinPrograma
}

 Elaborado por Susana Oviedo, Adriana José y Eugenia Alfonso 


EJERCICIO RESUELTO II
“Buscar en forma recursiva un valor en un vector, devolviendo la posición donde se
encuentra.”

Delimitación del problema:

P: ¿Qué tipos de datos tiene el vector? R: Enteros positivos


P: ¿A que se refiere con la posición? R: al valor del subíndice donde se encuentra, y que
devuelva 0 si no lo encuentra.

Análisis del problema:

ENTRADAS:
El vector cargado con números enteros y positivos; y el valor a buscar.

PROCESO:
Se recorre el vector, donde en cada llamada recursiva se incrementa la posición del
vector a comparar con el valor buscado.
La recursión termina cuando el resto es cero y el máximo común divisor es el último
divisor.

SALIDA:
La posición del valor en el vector o cero si no lo encuentra.

ALGORITMO
PROGRAMA Busqueda
//SUBPROGRAMAS
PROCEDIMIENTO CARGO(Por ref. Vec[50]:ENTERO)
VAR. ind:ENTERO
VARIAR ind DESDE 1 HASTA 50
REPETIR
ESCRIBIR(“Ingrese el valor : ”, ind)
LEER(Vec[ind])
HASTA QUE (Vec[ind] > 0)
FIN VARIAR
FINPROCEDIMIENTO

FUNCION Busco (Vec[50]: ENTERO, pos, queBusco: ENTERO):ENTERO


//pos debe ser 1, en la primer llamada a la función
SI (pos < 50) ENTONCES
SI (Vec[pos] == queBusco) ENTONCES
Busco = pos //lo encontró, finaliza la recursión
SINO
UTN – FRM – Ing. en Sistemas de Información EJERCICIOS OPTATIVOS
Algoritmos y Estructuras de Datos
Ciclo lectivo 2020- Trabajos Prácticos
Clase N°10-UT7- Página 4 de 5

Busco= Busco(Vec[], pos+1, queBusco) //como no lo encontró, sigue buscando


FINSI
SINO // pos = 50 último elemento a comparar
SI (Vec[pos] == queBusco) ENTONCES
Busco = pos //lo encontró, finaliza la recursión
SINO
Busco = 0 //no lo encontró, devuelve cero, finaliza la recursión
FINSI
FINSI
RETORNO

//PROGRAMA PRINCIPAL

 Elaborado por Susana Oviedo, Adriana José y Eugenia Alfonso 


INICIO
VAR Vec[50]: ENTERO, queBusco:ENTERO
//Cargo el vector con valores enteros positivos
CARGO(Vec[])
// Ingreso el valor a buscar
REPETIR
ESCRIBIR(“Ingrese el valor que busca: ”)
LEER(queBusco)
HASTA QUE (queBusco > 0)
SI Busco(Vec[],1,queBusco)<>0 ENTONCES
ESCRIBIR("El valor se encuentra en la posición ", Busco(Vec[],1,queBusco)
SINO
ESCRIBIR(“El valor no se encuentra en el vector”)
FINSI
FINPROGRAMA

 Consigna 2: Realizar los subprogramas recursivos en pseudocódigo:


1) Dado un número entero positivo, obtenga la suma de cada dígito, duplicando los pares. Ejemplo: 4351, resultado:
17, que surge: 1+5+3+4*2.
2) Subprograma que permita encontrar el menor número de un vector.
3) Dado un número entero positivo, obtenga la suma de cada uno de los dígitos que forma el número. Ejemplo:
4351; resultado: 13, que surge: 1+5+3+4. Además, determine para n=628, ¿cuál es el resultado?.
4) La madre de Juan proyecta colocar en una alcancía 1$ el día que su hijo cumpla un año, e ir duplicando la
cantidad sucesivamente en todos los cumpleaños. Dada la edad de Juan indicar cuántos $ debería tener en su
alcancía.
5) Dado un número entero positivo (n), obtenga la suma de los n primeros números, duplicando los pares.
6) Dado un número entero positivo, indique si es potencia de dos (o no). Dado un número entero entre –9 y 9,
obtenga lo siguiente: n= 5, resultado: -35, que surge del cálculo: (10+5)-(10+4)-(10+3)-(10+2)-(10+1)=15-14-13-
12-11; n= -6, resultado: -51, que surge del cálculo: (10+6)-(10+5)-(10+4)-(10+3)-(10+2)-(10+1)=16-15-14-13-12-
11.
7) Dado un número entre 0 y 9, obtenga: n=5, resultado: 531; n=9, resultado: 97531; n=6, resultado: 6420.
8) Subprograma que permita multiplicar los elementos de un vector.
9) Dado un número entero positivo, obtenga la multiplicación de los dígitos pares e impares (por separado).
Ejemplo: 43512, resultado: 8 y 15 que surgen de: 4*2 y 3*5*1.
10) Dado un vector de números, determinar cuántos positivos, negativos y cero tiene.
11) Dado un número entero positivo, muestre todos los números impares desde el número hasta 50. Si el número
dado es mayor a 50, ESCRIBIR un mensaje.
UTN – FRM – Ing. en Sistemas de Información EJERCICIOS OPTATIVOS
Algoritmos y Estructuras de Datos
Ciclo lectivo 2020- Trabajos Prácticos
Clase N°10-UT7- Página 5 de 5
12) Dado un número entero positivo, que sabemos que es potencia de dos indique qué potencia es.
13) En una bombonería, dado un peso en gramos, se desea establecer la cantidad de cajas necesarias para cada
uno de los tamaños disponibles (1 kilo, 500 gramos y 100 gramos). Ejemplo: se pesan 1680 gramos; el resultado
será: 1 caja de 1 kilo, 1 caja de 500 gramos y 2 cajas de 100 gramos para los 180 gramos restantes.
14) Subprograma que permita obtener la suma y la multiplicación de los elementos de un vector.
15) Dado un número entero positivo, muestre todos los números impares desde el número, hasta 1.
16) Dado un número entero positivo, debe indicar si es potencia de 3 (o no); y en caso de serlo, cuál potencia es.
Ejemplo: 81; el resultado será: SI, 4. Otro ejemplo: 6, el resultado será: NO (6 no es potencia de 3), -1.
17) Dado un vector de notas, determinar el promedio y la cantidad de desaprobados.
18) Dados dos números ESCRIBIR los pares comprendidos entre ellos, en forma ascendente. Si son iguales,
ESCRIBIR un mensaje.

 Elaborado por Susana Oviedo, Adriana José y Eugenia Alfonso 

También podría gustarte