bin2ent(binario)=cifra_derecha+2*bin2ent(binario_sin_cifra_derecha)
pero si ya te dan la expresión que dificultad tiene? xD
Una función recursiva es una función que se llama así misma.
int nombreentero(int num[], int pos){
if (pos>0)
return num[pos]+2*nombreentero(num,pos-1);
else
return num[pos];
}
Para saber cómo trabaja:
imaginate que entra 1101101 pos=6
primero: devuelve 1 +2*(110110)
aquí estaríamos llamando de nuevo a la función y antes de dar todo el resultado, tiene que terminar todas las llamadas recursivas así que ocurriría que se van almacenando en memoria (no sé si es exactamente eso pero a grandes rasgos es así).
segundo: devuelve 0+2(11011)
tercera: devuelve 1+2(1101)
cuarta: devuelve 1+2(110)
quinta: devuelve 0+2(11)
sexta: devuelve 1+2*(1)
septima: devuelve 1 (pos=0)
bien, ahora es hacer el proceso inverso desde la septima hasta la primera que sería:
((((((((((((12)+1)2)+0)2)+1)2)+1)2)+0)2)+1
Algunos parentesis sobran pero a lo mejor así te queda más claro lo que hace: devolver el número y multiplicar por dos todo lo que le sigue.
el resultado sería: 109 si no me he equivocado xD
Con la recursividad hay que tener cuidado con los returns que hacen 2 llamadas porque el coste va a ser exponencial.
Imaginate que en vez de una llamada hiciera dos, en la primera iteración haría 2, en la segunda haría 4, en la tercera haría 8... pero bueno, es algo que no viene al caso en este ejercicio xD