Hola.
Una función recursiva se llama a si misma por su nombre y si la funcion es "funcion_recursiva_potencia2"[1], no se puede invocar como "potencia2"[2]:
int (funcion_recursiva_potencia2(int x,int n)); [1]
{
int numero;
if (n==0)
return 1;
else
return x*potencia2(x, n-1); [2]
}
Es inncecesario encerrar entre paréntesis a la función, así también como la variable local "numero".
Entonces sería:
int potencia(int x,int n) {
if (n==0)
return 1;
else
return x * potencia(x, n-1);
}
Saludos.