Duda de principiante sobre recursividad

Iniciado por bananakatana, 12 Diciembre 2010, 19:16 PM

0 Miembros y 1 Visitante están viendo este tema.

bananakatana

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.

BlackZeroX

#1
.
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 (cpp) [Seleccionar]


#include <iostream>

using namespace std;

int autosum(int val,int lim,int valincrement, int aux);

int main()
{
   cout << autosum(10,200,10,0);
   cin.get();
   return (1);
}

int autosum(int val,int Vallim,int valincrement, int aux)
{   /*
   La recursividad tiene la ventja de reduccion de codigo,
   pero tiene la desventaja que crea copias de la misma
   funcion N cantidad de veces necesarias, por ende es lenta.
   */
   if (val >= Vallim)
   {
       return aux;
   } else {
       return autosum(
                      val + valincrement , //  Incrementamos
                      Vallim ,             //  Valor Limite
                      valincrement ,       //  Valor en incremento
                      aux+1);              //  Contador de vueltas
   }
}



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!¡.
The Dark Shadow is my passion.

negux

Tu ejercicio va mas a como evaluar una expresion prefija, se puede hacer utilizando pilas