Итак, я изучал рекурсивные функции и пытался писать с ними коды. Это мой код для полиномов Лежандра.
Функция использует следующую формулу: 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
I не могу понять проблему. Я попытался переписать формулу в функции. Может быть, это как-то связано с формой l oop?
#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);
}}}}