因此,我一直在研究递归函数,并一直尝试使用它们编写代码。这是我的勒让德多项式代码。
该函数使用以下公式: P(n)=((2n-1)/ n)P(n-1)-((n-1)/ n)* P(n-2)
基于x = 0.5和n = 5的输入,我想要的输出是:
x=0.500000 n=1 P(1)=0.500000
x=0.500000 n=2 P(2)=0.250000
x=0.500000 n=3 P(3)=0.083333
x=0.500000 n=4 P(4)=-0.041667
x=0.500000 n=5 P(5)=-0.141667
但我不断得到以下输出:
x=0.500000 n=1 P(1)=0.000000
x=0.500000 n=2 P(2)=-0.500000
x=0.500000 n=3 P(3)=-0.833333
x=0.500000 n=4 P(4)=-1.083333
x=0.500000 n=5 P(5)=-1.283333
我似乎无法弄清楚问题所在。我试图在函数中重新编写公式。也许与for循环有关?
#include <stdio.h>
float Legen_Poly(n,x){
if (n==0)
return 1;
else if (n==1)
return x;
else{
return ((2*n-1)*Legen_Poly(n-1,x)-(n-1)*Legen_Poly(n-2,x))/n;
}}
int main(){
float x ,a;
int cntrl_val=0,n;
while(cntrl_val==0){
printf("\nPlease enter x [-1,1]: ");
scanf("%f",&x);
if (x>1 || x<-1)
printf("\nThis x value is not valid!");
else{
printf("\nPlease enter n= ");
scanf("%d",&n);
if (n<0)
printf("\nThis n value is not valid!");
else
cntrl_val=1;
printf("\nThe first %d are as follows",n);
for(int count=0;count<n;count++){
a=Legen_Poly(1+count,x);
printf("\nx=%f",x);printf(" n=%d",1+count);printf(" P(%d)=%f",1+count,a);
}}}}