Título: Pequeña duda con funcion recursiva Publicado por: CCross en 16 Mayo 2013, 00:56 am Hey!! buenas a todos los apasionados de esto de la programacion, me acabo de inscribir
en el foro. Yo soy unas de esas personas que cuando encuentra un codigo que no entiende, trata estudiar como funciona cada expresion, funcion etc; En fin la cuestion es que me he topado con un codigo que me cuesta un poco comprenderlo especificamente se trata de una funcion recursiva que lo que hace es convertir un un numero decimal a binario miren esta es la funcion: Código
Lo que llegue a entender es que si dvide es mayor que cero, se ejecuta la funcion que luego es multiplicada por diez y se le suma uno. Por decirlo si yo le paso un siete a la funcion, en un primer momento resto valdria 1 y divide seria 3 como ven divide es mayor que cero, por lo que la funcion se ejecuta. Lo mas logico es que la funcion binario(divide) retornara un cero que es multiplicada por 10 que da 0 y luego se le suma 1 y asi sucesivamente en caso de que divide no sea mayor que 0 se ejecuta el bloque correspondiente a false que le agrega cero Que me corrijan si esto no es asi saludos a todos :rolleyes: Título: Re: Pequeña duda con funcion recursiva Publicado por: amchacon en 16 Mayo 2013, 10:15 am Creo que no es num sino dec.
Título: Re: Pequeña duda con funcion recursiva Publicado por: CCross en 16 Mayo 2013, 15:42 pm Creo que no es num sino dec. Si efectivamente habia cambia los parametros para que sea mas congruentes me olvide hacer los cambios dentro jeje:. Código
Y hiendo al tema que opinas estoy en lo corecto seria asi como funciona o no¿? Saludos Título: Re: Pequeña duda con funcion recursiva Publicado por: cypascal en 16 Mayo 2013, 23:37 pm Hola, el fundamento de la función es que un número binario se puede calcular como:
Binario(x)=Binario(x/2)&(x%2) Donde & indica concatenación, lo que en base decimal, también se puede conseguir multiplicando por 10 y sumando ambos. Este método es el que te enseñan en la escuela, el de dividir el número por dos e irte quedando con los restos en orden contrario al que los calculaste. (En wikipedia si pones número binario sale) Salu10 Título: Re: Pequeña duda con funcion recursiva Publicado por: CCross en 17 Mayo 2013, 02:07 am Muchas gracias cypascal por la aclaracion, he buscado por internet
y he encontrado una funcion que hace esto de una menera mas simple: Código
Esta divide el numero entre dos hasta que quede 0 y apunta a los residuos del ultimo al primero. Los restos generados en cada division forman el numero binario el primer resto es el bit menos significativo (LSB) y el último resto es el bit mas significativo (MSB) del numero binario. Código
Código
En este caso segun entiendo la funcion printf imprime inversamente los residuos resultante de la division, aprovecha esa propiedad de imprimir el bit mas significativo primero y el LBS al ultimo siendo el primero en originarse, podria alguien explicarme como esto es posible.. cypascal lo que entendi fue que al multiplicarlo por 10 consiste una forma de ir ordenado los residuos de forma inversa seria algo asi no Un saludo Título: Re: Pequeña duda con funcion recursiva Publicado por: leosansan en 17 Mayo 2013, 08:12 am sorry equivoqué el post
Título: Re: Pequeña duda con funcion recursiva Publicado por: leosansan en 17 Mayo 2013, 12:23 pm En este caso segun entiendo la funcion printf imprime inversamente los residuos resultante de la division, aprovecha esa propiedad de imprimir el bit mas significativo primero y el LBS al ultimo siendo el primero en originarse, podria alguien explicarme como esto es posible.. Pues una forma es ir guardando en un array y luego imprimirlo al revés, o bien lo pasa a binario con la función "itoa": Código
Saluditos!. .... ..(http://st.forocoches.com/foro/images/smilies/aaaaa.gif) Título: Re: Pequeña duda con funcion recursiva Publicado por: CCross en 17 Mayo 2013, 20:40 pm Hola leosansan excelete codigo lo de itoa no lo sabia muy bueno pero aun
no logro enterder del todo este codigo: Código
Especificamente en la parte de la multiplicacion por diez y luego la suma me gustaria saber que valor devuelve la funcion de cada llama a ella yo supongo que seria cero. Saludos :rolleyes: Título: Re: Pequeña duda con funcion recursiva Publicado por: leosansan en 19 Mayo 2013, 13:53 pm Hola leosansan excelete codigo lo de itoa no lo sabia muy bueno pero aun no logro enterder del todo este codigo: Código
Especificamente en la parte de la multiplicacion por diez y luego la suma me gustaria saber que valor devuelve la funcion de cada llama a ella yo supongo que seria cero. Es cuestión de "escribir" lo que va haciendo el código. Suelen ser peleonas las funciones recursivas y no muy eficientes. Te dejo un par de casos para que veas como actúa. Observa que devuelve los dígitos en orden correcto, no hay que darles la vuelta: Citar binario(11)=b(11)= =10*b(5)+1= =10*(10*b(2)+1)+1=100*b(2)+11= =100*(10*b(1))+0)+11=1000*b(1)+11= =1000*(1)+11=1011 binario(12)=b(12)= =10*b(6)+0= =10*(10*(b(3)+0)=100*b(3)= =100*(10*b(1))+1)=1000*b(1)+100= =1000*(1)+100=1100 Saluditos!. .... ...(http://st.forocoches.com/foro/images/smilies/simba1.gif) Título: Re: Pequeña duda con funcion recursiva Publicado por: CCross en 19 Mayo 2013, 17:41 pm leosansan gracia por darte el tiempo de aclararme la duda que tenia, esto de la
recursividad esta complicadita. Y efectivamente una solucion recursiva generalmente es menos eficiente por el consumo de mayor de recursos que la iterativa. Sin embargo en muchas situacion nos puede facilitar las cosas. Saludos.. ;D |