Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: bananakatana en 12 Diciembre 2010, 19:16 pm



Título: Duda de principiante sobre recursividad
Publicado por: bananakatana en 12 Diciembre 2010, 19:16 pm
Hola a todos. Tengo que hacer un ejercicio que utilice una función recursiva en C++, pero no tengo la más mínima idea de cómo encarar el programa. El programa tiene que hacer operaciones matemáticas básicas (sumas, restas y multiplicaciones, nada más) utilizando el siguiente formato:
Por el canal de entrada: + 4 3
Entonces, se debería hacer la operación "4+3" y debería devolver 8.
Si ponemos: * 8 + 4 3
La operación es "8*(4+3)" y su solución es 56.
Otro ejemplo: * - 2 8 + 4 3
Sería "(2-8)*(4+3)" y el resultado sería -42.

No sé ni cómo comenzar, he pensado en utilizar una función tal que así:

#include <iostream>
using namespace std;

int operacion(bool suma, bool resta, bool mult) {
    int resul;
    char op;
    if (cin >> op) {
        if (op == '+') suma = true;
        else if (op == '-') resta = true;
        else if (op == '*') mult = true;
        else {
            if (suma) resul = op - '0' + operacion(suma, resta, mult);
            if (suma) resul = op - '0' - operacion(suma, resta, mult);
            if (mult) resul = op - '0' * operacion(suma, resta, mult);
        }
    } else return 0;
}

Evidentemente no funciona, ni de cerca. Primero, no sé dónde inicializar "resul", ni tampoco sé cómo desarrollar las operaciones del tipo "* -" como el de "* - 2 8 + 4 3", ni cómo tratar las restas... En fin, que no tengo ni p**a idea.

Una cosa, no tengo permitida la utilización de vectores (por supuesto tampoco strings), ni structs.

Un saludo y gracias de antemano.


Título: Re: Duda de principiante sobre recursividad
Publicado por: BlackZeroX en 13 Diciembre 2010, 01:50 am
.
Lee algo sobre Stack o pila para que comprendas como funciona la reursividad1¡.

En si sobre el Stack/Pila  es que el ultim se coloca ensima del ultimo y el ultimo es el que sale primero siendo el primero que se agrego siendo el ultimo, de forma mas practicas es como poner en una mesa una torre de libros, dichos libros ensima de otros y por obvias razones el primero que agregaste sera el ultimo en retirar de la columna de libros pero el ultimo que agregaste es el primero en salir.

Ejemplo Basico de Recursividad.

Código
  1.  
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int autosum(int val,int lim,int valincrement, int aux);
  7.  
  8. int main()
  9. {
  10.    cout << autosum(10,200,10,0);
  11.    cin.get();
  12.    return (1);
  13. }
  14.  
  15. int autosum(int val,int Vallim,int valincrement, int aux)
  16. {   /*
  17.     La recursividad tiene la ventja de reduccion de codigo,
  18.     pero tiene la desventaja que crea copias de la misma
  19.     funcion N cantidad de veces necesarias, por ende es lenta.
  20.     */
  21.    if (val >= Vallim)
  22.    {
  23.        return aux;
  24.    } else {
  25.        return autosum(
  26.                       val + valincrement , //  Incrementamos
  27.                       Vallim ,             //  Valor Limite
  28.                       valincrement ,       //  Valor en incremento
  29.                       aux+1);              //  Contador de vueltas
  30.    }
  31. }
  32.  
  33.  

Nota: Si vas  manejar Strings o Arrays de caracteres que es lo logico deberas usar punteros para que la misma no se dupplique de forma innecesaria en la memoria.

Dulces Lunas!¡.


Título: Re: Duda de principiante sobre recursividad
Publicado por: negux en 13 Diciembre 2010, 04:04 am
Tu ejercicio va mas a como evaluar una expresion prefija, se puede hacer utilizando pilas