Ver Mensaje Individual
  #3 (permalink)  
Antiguo 11/11/2014, 10:23
Avatar de leosansan
leosansan
 
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 12 años
Puntos: 49
Respuesta: funciones recursivas

Cita:
Iniciado por vangodp Ver Mensaje
Bueno... Anoche estube contestando un post por internet y se trataba de funciones recursivas

No tengo mucha practica con eso pero logre hacer un ejercicio que para mi ha sido algo duro jaja, pero logre hacer lo que postare mas abajo.

El usuario habia pedido que dado un numero como 3183 de 4 digitos.
comaparase cada digito con el ultimo y si fuera mayor o igual, se multiplicara por el seguiente.

El numero 3183 seria n = 3*8*3 que daria 72. El 1 se desecha ya que no es mayor que el ultimo.

Mi pregunta es....
¿Hay alguna forma mas facil de hacer que la que hice yo? Lo digo por que con recursivas no tengo NPI XDDD
......................
¿Y ademas cual es la ventaja de usar eso?
Suerte chicos
Ventajas respecto a un ciclo más bien pocas ya que hay que estar invocando a la función una y otra vez, cosa que en un ciclo simple te lo ahorras. Como ejercicio no está mal.

Te dejo en el código un par de cout para que veas como trabaja. Si se los pones en tu código veras que está trabajando de más y es por la falta de los return.

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int f ( int n ) {
  5.     static int a = 1 , u = n % 10 ;
  6.     if ( n > 0 ) {
  7.         if ( n % 10 >= u )
  8.             a = a * ( n % 10 ) , cout << "a =  " << a << endl;              
  9.         else
  10.             cout << "Desechando la ultima posicion de n: " << n % 10 << ". Es menor que static u: " << u << endl
  11.             , cout << "n ahora contiene " << n / 10 << ", y se envia a f() para seguir multiplicando..." << endl;
  12.         return f ( n / 10 );
  13.     }
  14.     cout << "Retornando: " << a << endl;
  15.     return a;
  16. }
  17.  
  18. int main() {
  19.     int n =  3183;  
  20.     cout << f ( n ) << endl;
  21.     cin.ignore();
  22.     return 0;
  23. }

Un fuerte saludo vangodp

¡¡¡Saluditos!!!