Ver Mensaje Individual
  #1 (permalink)  
Antiguo 11/11/2014, 09:19
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Pregunta funciones recursivas

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

Código C++:
Ver original
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int f ( int n ) {
  5.     static int op = 0;
  6.     static int a;
  7.     static int u;
  8.    
  9.     if ( op == 0 ) {
  10.         op++;
  11.         a = 1;
  12.         u = n % 10;
  13.     }
  14.    
  15.     if ( n > 0 ) {
  16.         if ( n % 10 >= u ) {
  17.             a = a * ( n % 10 );
  18.             f ( n = n / 10 );
  19.         } else {
  20.             cout << "Desechando la ultima posicion de n: " << n % 10 << ". Es menor que static u: " << u << endl;
  21.             n = n / 10;
  22.             cout << "n ahora contiene " << n << ", y se envia a f() para seguir multiplicando..." << endl;
  23.             f ( n );
  24.         }
  25.        
  26.        
  27.     }
  28.    
  29.     cout << "Retornando: " << a << endl;
  30.     return a;
  31. }
  32.  
  33. int main() {
  34.     //funciona con numeros mayores que 4 digitos... lo que quepa en un int vamos XDDD, pero no poner numeros muy grandes o puedes literalmente causar un stackoverflow XD
  35.    
  36.     int n =  3183;  // <---cambie aqui para ver diferentes resultados.
  37.     cout << f ( n ) << endl;
  38.  
  39.     cin.ignore(); //pausa el programa
  40.     return 0;
  41. }

¿Y ademas cual es la ventaja de usar eso?
Suerte chicos