#include <iostream>
using namespace std;
int f ( int n ) {
static int op = 0; //permite el paso una sola vez en la primera llamada a la funcion
static int a; //acumulador... guardara los numeros multiplicados
static int u; //almacena el ultimo numero para hacer comparaciones
//solo se entra aqui una vez
if ( op == 0 ) {
op++;
a = 1;
u = n % 10;
}
//si n es mayor que 0 seguimos acumulando
if ( n > 0 ) {
//...pero solo acumulamos si el ultimo digito de n es mayor que la variable estatica u.
if ( n % 10 >= u ) {
a = a * ( n % 10 );
f ( n = n / 10 ); //enviamos el 318 para seguir calculando
} else {
cout << "Desechando la ultima posicion de n: " << n % 10 << ". Es menor que static u: " << u << endl;
n = n / 10; //Si el ultimo digito de n es manor que la variable estatica u nos deshacemos de el....
cout << "n ahora contiene " << n << ", y se envia a f() para seguir multiplicando..." << endl;
f ( n ); //...y repetimos operacion
}
}
cout << "Retornando: " << a << endl;
return a;
}
int main() {
//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
int n = 23523583; // <---mude aqui para ver los cambios =)
cout << f ( n ) << endl;
cin.ignore(); //pausa el programa
return 0;
}