[Ayuda] Algún entendido en programación?

Por qúe motivo no funciona esta función recursiva, que deberia invertir los numeros, (le llega 123 y escribe 321), porqué con el else no funciona,(creo que está ahi el problema).

void invertir(long int n) {
if(n<10){
invertir(n/10);
}else{
printf("%ld",n%10);
}
}

Saludos. [360º]
Creo que el problema que tienes es que según lo tienes puesto solo te va a salir por pantalla el número que sea menor que 10 y pasa por el else que a su vez hace n%10 que supongo que te dará siempre 0 no (cualquier número menor de 10 dividido por 10 el resto es 0) ?
Exacto, según lo tienes siempre va a sacar un 0.

Divides entre 10 hasta que tengas un numero menor a 10. Y cuando lo tienes, le haces un x%10 (resultado=0). Sin tener en cuenta que ya no tratas los números anteriores.


EDIT: Lo he visto mal, fallo mio. Podrías hacer algo asi:

void invertir(long int n) {
  if(n=>10){
    printf(n%10);
    invertir(n/10);
  }else{
    printf(n);
  }   
}
n < 10


Es al reves:
n >= 10
Crowhuntt escribió:Exacto, según lo tienes siempre va a sacar un 0.

Divides entre 10 hasta que tengas un numero menor a 10. Y cuando lo tienes, le haces un x%10 (resultado=0). Sin tener en cuenta que ya no tratas los números anteriores.

EDIT: Lo he visto mal, fallo mio. Podrías hacer algo asi:

void invertir(long int n) {
  if(n=>10){
    printf(n%10);
    invertir(n/10);
  }else{
    printf(n);
  }   
}


Esto funciona muchas gracias Crowhuntt, pero no entiendo porqué el n%10 se hace si es mayor o igual a 10, porque es el resto no?
Se supone que si n>=10 lo que hace es dividir el número entre 10, no hace el resto?
ej 123/10= 12,3 el resto cuál seria?
Spartan_1177 escribió:Esto funciona muchas gracias Crowhuntt, pero no entiendo porqué el n%10 se hace si es mayor o igual a 10, porque es el resto no?
Se supone que si n>=10 lo que hace es dividir el número entre 10, no hace el resto?
ej 123/10= 12,3 el resto cuál seria?


123/10 como tu bien dices es 12,3 (sobran 3, por lo que el resto es 3). Sacas por pantalla el 3.
12/10 = 1,2 (sobran 2). Sacas por pantalla el 2.
1 es menor a 10, por lo que se salta el "if" y se ejecuta el "else". Sacas por pantalla el 1.

;)
luciferfran escribió:Creo que el problema que tienes es que según lo tienes puesto solo te va a salir por pantalla el número que sea menor que 10 y pasa por el else que a su vez hace n%10 que supongo que te dará siempre 0 no (cualquier número menor de 10 dividido por 10 el resto es 0) ?


Para nada compañero, el resto de cualquier numero menor que diez dividido entre 10 es él mismo! 9%10=9, 8%10=8.

Ahora hacemos la traza, aunque el compañero de arriba ya la ha hecho perfectamente, la repito, porque me encantan estas cosas:
El resto es 3 compañero porque estamos hablando de enteros, asi que no hay decimales
123%10=3 //Imprimimos 3
Mandamos a la función 123/10 (sin decimales, solo el cociente, porque es un int, o sea que mandamos 12.)
12 es mayor que 10, así que aplicamos el resto
12%10=2 //Imprimimos 2
Y mandamos a la función 12/10 (sin decimales, así que mandamos 1).
Y como uno es menor que 10, lo imprimimos directamente //imprimimos 1
Si te fijas, acabas de imprimir 123 al revés.
Un saludo!
6 respuestas