El problema puede ser cuestión de tipos y de las operaciones.
Por ejemplo: Si n=2 : (n-1)/n => (2-1)/2 = 0
Pensarás que el resultado debería ser 0.5, pero como n es un entero sin signo, se realiza una división entera. Para hacer la división como tu quieres tienes que convertir el tipo de dato.
Código C++:
Ver originaldouble leg(unsigned n, double x){
if (n==0) return 1;
if (n==1) return x;
double le0=1,le1=x, le2,aux;
for (unsigned int i=2; i<=n; i=i+1){
le2=((double)(2*n-1)/n)*x*le1;
aux=((double)(n-1)/n)*le0;
le2=le2-aux;
le0=le1; le1=le2;
}
return le2;
}