Recursividad C++
Recursividad C++
Recursividad C++
I. OBJETIVOS
Que el estudiante:
• Defina los conceptos de Recursividad y Funciones
• Diseñe funciones recursivas al plantear una solución de un problema con C++
• Practique todos los conceptos relacionados a la creación y uso de funciones, como antesala a la programación
orientada a objetos POO
Concepto de Recursividad
Una función recursiva sigue la estrategia del “divide y vencerás”, dividiendo la definición de la misma en dos
partes:
La condición (o condiciones) a cumplirse para que un problema se pueda resolver de forma recursiva hacen que
la función pueda escribirse en forma recursiva, llamándose a si misma y que la especificación del problema tenga
una solución trivial. Esta solución trivial permite establecer una condición de paro a las llamadas recursivas de la
función.
1/5
Guía # 11: Funciones recursivas en C++
La forma recursiva plantea el problema a resolver de forma más simple o más pequeña, ya que ya no se calcula el
factorial de la n original, sino el factorial del valor anterior al n, es decir, el término ( n - 1 ) .
La solución trivial (condición de parada a llamadas recursivas) para el caso del factorial es el factorial de los
números 1 o 0, que por definición es 1. Cuando se llegue a este caso trivial las llamadas recursivas pararán, ya que
este es el problema que la función si puede resolver, sin duda alguna.
Para analizar el diseño recursivo del cálculo del factorial, observe el primer ejemplo del procedimiento.
IV. PROCEDIMIENTO
1. Cree una carpeta denominada IP_ejerciciosPractica11, en la cual guardara los siguientes códigos fuentes
solicitados a continuación
2. Tenga en cuenta que debe responder a las preguntas al final de algunos de estos códigos fuentes.
/***************************************************************
* Calcular el factorial de un número utilizando recursividad *
****************************************************************/
#include <iostream>
using namespace std;
#include <conio.h>
Introducción a la Programación 2
Guía # 11: Funciones recursivas en C++
main (){
int n;
//Leer la cantidad entera ingresada por el usuario
cout<<"Calcula del factorial de un numero entero positivo"<<endl;
do{
cout<<endl<<"Digite un Numero entero positivo: ";
cin>>n;
if(n<0)
cout<<endl<<"-> error, ingreso valor negativo, intente de nuevo..";
}while(n<0);
Ejemplo #2: Programa que lee una frase y luego la escribe de forma inversa (con letras invertidas).
/****************************************************************
* PROGRAMA QUE LEE UNA LÍNEA DE TEXTO CARACTER A CARACTER *
* Y LUEGO LOS ESCRIBE DE FORMA INVERSA USANDO RECURSIVIDAD *
****************************************************************/
#include<iostream>
using namespace std;
#include<conio.h>
//definiciones de funciones
main(){ //funcion principal
cout<<"Introduzca una linea de texto:\t";
invertir(); //llamada inicial de funcion recursiva
getch();
}
Introducción a la Programación 3
Guía # 11: Funciones recursivas en C++
void invertir(void){
char a; //guarda solo un caracter ASCII
a = getche(); // almacena una tecla presionada por usuario
if(a != 13)
invertir(); //nuevamente la funcion se llama a si misma
else
cout<<endl<<endl<<"Frase anterior con sus letras invertidas es:\t";
if(a!=13)
cout<<a; // escribe en pantalla el caracter ASCII almacenado en variable a
}
Importante:
+ Ingrese una frase y presione Enter. Vera que se le muestra la misma frase pero con cada una de sus letras
invertidos
+ Explique paso a paso, ¿Como realiza su trabajo la función invertir ()?
Tome de ejemplo la frase de entrada “abc_123”.
Ejemplo #3: Programa que encuentra el Máximo Común Divisor (MCD) de dos números enteros
#include <iostream>
using namespace std;
#include <conio.h>
Introducción a la Programación 4
Guía # 11: Funciones recursivas en C++
Importante:
+ Compile y ejecute el programa anterior. Ingrese los números 5 y 8. ¿Cuál es el MCD devuelto?
+ Ejecute de nuevo e ingrese los números 315 y 42. Explique paso a paso, ¿Como la función MCD calcula y
devuelve 21 (que es el máximo valor que los divide exactamente a ambos valores)?
3. Finalmente, resuelva cada uno de los siguientes problemas, para que al finalizarlos, sean evaluados por
su instructor.
Problema 1:
Realice un programa que solicite al usuario la Base y el Exponente de la potencia que se desea calcular, para luego
mostrarle respuesta en pantalla. Tener muy en cuenta los siguientes aspectos para la solución:
• Se deben crear una función denominada POTENCIA ( ), que reciba ambos valores de la potencia a
calcular en 2 parametros, para finalmente retornar resultado.
• Queda a su decisión utilizar Recursividad, aunque se recomienda su implementacion!!
• Tomar en cuenta que la Base y la Potencia deben ser valores enteros. Y también, cualquiera de ambos
valores pueden ser positivos, negativos o ceros.
• No puede utilizar la librería Math.h
Problema 2:
Se necesita determinar el sueldo neto mensual a pagar a un empleado que trabaja por horas. Los porcentajes (%)
que se aplican al sueldo base del empleado son:
Renta: 7% AFP: 4.5% Seguro Social: 3%
La hora de trabajo se paga a $ 7.50
Las horas extras se pagan el doble de una hora de trabajo normal. y están sujetas también a los descuentos de ley.
• Elabore una función denominada SueldoNeto( ) que utilice exclusivamente parámetros para recibir la
información de entrada requerida, asi como devolver el sueldo neto (liquido) a pagar al empleado.
• La función imprime en pantalla solamente los montos ($) de los descuentos de ley aplicados
V. DISCUSION DE RESULTADOS
• Hacer una función recursiva que calcule el enésimo elemento de la serie: 4, 6, 10, 16, 26, 42…
• Haga un programa en C que defina una función que le permita obtener el logaritmo de un número en una
base cualquiera. La base y el número deben ser solicitados al usuario desde main.
La función consta de 3 argumentos: la base y el exponente, además, la respuesta a devolver.
Ejemplos de algunos logaritmos que debe poder calcular: Log 5 125 , Log 7 26.34
VII. BIBLIOGRAFIA
• Deitel, Harvey M. y Deitel, Paul J. CÓMO PROGRAMAR EN C++. 1ra Edición, Editorial Mc Graw Hill
• Pappas, Chris H. y Murray, William H. MANUAL DE REFERENCIA DE VISUAL C++ 6.0. 4ta Edición.
Editorial Prentice Hall (PEARSON).
• Joyanes Aguilar, Luís. PROGRAMACIÓN EN C++ - ALGORITMOS, ESTRUCTURAS DE DATOS Y
OBJETOS. Editorial McGraw Hill, España, 2000.
Introducción a la Programación 5