勒让德多项式,为何结果不对

img


结果是不对的

img


但是函数是没问题的

img


#include<stdio.h>
float P(float x,int n){
    if (n == 0)
        return 1;
    if (n == 1)
        return x;
    if (n >= 2)
        return (float)(2 * n - 1) / n * x * P(x, n - 1) - (float)(n - 1) / n * P(x, n - 2);
}
int main() {
    printf("%.2f", P(5.5, 1));
    return 0;
}


把函数返回类型 x 等,都用双精度浮点型 double .

#include<stdio.h>
double P(double x,int n){
    if (n == 0)
        return 1;
    if (n == 1)
        return x;
    if (n >= 2)
        return (double)(2 * n - 1) / n * x * P(x, n - 1) - (double)(n - 1) / n * P(x, n - 2);
}
int main() {
    double x;
    int  n;
    scanf("%lf%d",&x,&n);
    printf("%.2f", P(x, n));
    return 0;
}

求解答