Не могу понять, почему вывод неправильный - PullRequest
0 голосов
/ 27 марта 2020

Итак, я изучал рекурсивные функции и пытался писать с ними коды. Это мой код для полиномов Лежандра.

Функция использует следующую формулу: 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);

    }}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...