Programación General > C/C++

 Explicacion en recursividad

(1/1)

o.ficu:
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 ---#include<iostream>#include<stdlib.h> using namespace std;void binario(int n);  int main(){    int n;     cout<<"Ingrese numero en base 10: ";     cin>>n;     cout<<"el numero en binario es: ";     binario(n);     system("PAUSE");     return 0;}void binario(int n){        if(n>0){             binario(n/2); // llama recursivamente a la funcion             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?????}  Gracias por u ayuda

Eternal Idol:
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.

Geo:
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 ;).

o.ficu:
Muchas gracias, me esta gustando cada vez mas este foro XD

Eternal Idol:
De nadas  :lol:

Navegación

[0] Índice de Mensajes

Ir a la versión completa