• Sábado 9 de Noviembre de 2024, 02:21

Autor Tema:  Explicacion en recursividad  (Leído 1660 veces)

o.ficu

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Explicacion en recursividad
« en: Domingo 18 de Octubre de 2009, 02:05 »
0
Hola, casi paresca un poco tonta mi pregunta pero en el siguiente programa que transforma un numero de base a base 2:
Código: C
  1. #include<iostream>
  2. #include<stdlib.h>
  3.  
  4. using namespace std;
  5. void binario(int n);
  6.  
  7.  
  8. int main()
  9. {    int n;
  10.      cout<<"Ingrese numero en base 10: ";
  11.      cin>>n;
  12.      cout<<"el numero en binario es: ";
  13.      binario(n);
  14.      system("PAUSE");
  15.      return 0;
  16. }
  17. void binario(int n)
  18. {  
  19.      if(n>0){
  20.              binario(n/2); // llama recursivamente a la funcion
  21.              cout<<n%2;}// aca es mi duda, por q imprime todos los digitos si el cout esta puesto cuando recien termina la ultima llamada a la funcion, por q imprime todos los digitos y no solo el ultimo?????
  22. }
  23.  
Gracias por u ayuda

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Explicacion en recursividad
« Respuesta #1 en: Domingo 18 de Octubre de 2009, 08:16 »
0
Supongamos que el numero es 5:

binario(5):
n es 5, mayor a 0 asi que llamamos a binario con 2
binario(2):
n es 2, mayor a 0 asi que llamamos a binario con 1
binario(1):
n es 1, mayor a 0 asi que llamamos a binario con 0
binario(0):
n es 0, no es mayor a 0 asi que aca empezamos a retonar a las anteriores funciones
binario(1):
n sigue siendo 1 y n%2 = 1, entonces imprime 1 y retorna
binario(2):
n sigue siendo 2 y n%2 = 0, entonces imprime 0 y retorna
binario(5):
n sigue siendo 5 y n%2 = 1, entonces imprime 1 y retorna

Volvemos al main.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Explicacion en recursividad
« Respuesta #2 en: Domingo 18 de Octubre de 2009, 08:23 »
0
En la función binario, no solamente se tiene la llamada recursiva sino también una instrucción normal, la cual se debe ejecutar una vez haya concluido la recursividad, espero puedas visualizarlo con este ejemplo:

Suponiendo que el número ingresado sea 4

binario( 4 ), llamada dentro de la función main
4 > 0, se cumple, llama a binario
--binario( 4 / 2 ), binario se llama a si misma pasando 2 como argumento (4/2)
--2 > 0, se cumple, llama a binario
----binario( 2 / 2 ), binario se llama a si misma pasando 1 como argumento (2/2)
----1 > 0, se cumple, llama a binario
------binario( 1 / 2 ), binario se llama a si misma pasando 0 como argumento (1/2)
------0 > 0, no se cumple, volvemos al flujo del programa
------cout (1 % 2), después de llamar a binario(1/2) y retomar el flujo del programa, se llama a cout( 1%2)
----cout (2 % 2), después de llamar a binario(2/2) y retomar el flujo del programa, se llama a cout(2%2)
--cout (4 % 2), después de llamar a binario(4/2) y retomar el flujo del programa, se llama a cout(4%2)
se continúa con el programa

-----------------
Edición:
Je, Eternal Idol me ganó otra vez mientras escribía ;).
La imaginación es el límite.
Hardware & Software | Mexchip

o.ficu

  • Nuevo Miembro
  • *
  • Mensajes: 14
    • Ver Perfil
Gracias!!
« Respuesta #3 en: Domingo 18 de Octubre de 2009, 21:26 »
0
Muchas gracias, me esta gustando cada vez mas este foro XD

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Explicacion en recursividad
« Respuesta #4 en: Lunes 19 de Octubre de 2009, 05:47 »
0
De nadas  :lol:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.