c++ con recursividad

P

No se me da muy bien la programación y necesito ayuda con este ejercicio de recursividad en c:

Necesito hacer un programa en metodo recursivo que transforme un número expresado en notación binaria a número entero. La fórmula que nos dan para pasar de binario a entero es la siguiente:

bin2ent(binario)=cifra_derecha+2*bin2ent(binario_sin_cifra_derecha)

Aquí es lo que tengo momentaniamente:

int nombreentero(int num[], int pos){

if(pos>0){
			nombreentero[pos]=num[pos]+2*nombreentero[pos-1];
 
}else{
	
	return nombreentero(pos);

}

}

En la función principal recojo el valor en binario y el número de posiciones que hay en ese número binario.

Muchas gracias.

Saludos,

MTX_Anubis

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

Usuarios habituales