C++ Ошибка рекурсивной функции

Тема в разделе "Общие вопросы по С и С++", создана пользователем VarkrafT, 4 апр 2008.

  1. VarkrafT

    VarkrafT Гость

    Здравствуйте. Вот программа с использованием рекурсивной функции.
    s1,s2,s3,s4,s5-считают суммы членов ряда
    next- вычисляет очередной член ряда
    stx-считает степень х
    х=0.1; |x|<1; шаг х=0.1
    Вычисляться должен арктангенс(х)
    s1,s2-правильно считают, а s3,s4,s5-нет.
    Подскажите где ошибка пожалуйста.

    [codebox]#include<math.h>
    #include<conio.h>
    #include<iostream.h>
    #include<iomanip.h>
    #include<fstream.h>
    #include<stdlib.h>

    ofstream fout;
    double p=3.141592653589793;
    float stx(float x, int n)
    {if(x==0) return(0);
    else if(n==0)return(1);
    else if(n==1) return (x);
    else return(x*stx(x,n-1));
    }

    float next(float x,int n)
    {
    return atan(x/sqrt(1-stx(x,2)));
    }

    typedef float(*func)(float,int);

    float s1(float x,float e)
    {
    float a=((2*1-1)*stx(x,2*1+1))/((2*1)*(2*1+1)),s=p/2-x;
    int n=1;
    while (fabs(a)>e)
    {s-=a; a*=((2*n-1)*stx(2*n+1,2)*stx(x,2))/((2*n+2)*(2*n+3));
    n++;
    }
    return(s+a);
    }

    float s2(float x,float e)
    { float a=a=((2*1-1)*stx(x,2*1+1))/((2*1)*(2*1+1)),s=p/2-x;
    int n=1;
    do
    {s-=a; a*=(((2*n-1)*stx(2*n+1,2)*stx(x,2))/((2*n+2)*(2*n+3)));
    n++;
    }
    while (fabs(a)>e);
    return(s+a);
    }

    float s3(int n,float x,float e, func fn)
    {
    float f=fn(x,n),s=p/2;
    while(fabs(f)>e)
    {s-=f;n++;f=fn(x,n);}
    return(s+f);
    }

    float s4(int n,float x,float e,func fn)
    {
    float f=fn(x,n),s=p/2;
    do {s-=f;n++;f=fn(x,n);}
    while(fabs(f)>e);
    return(s+f);
    }

    float s5(int n,float x, float e,func fn)
    {
    float f=fn(x,n);
    if(fabs(f)<e)return f;
    else return(f+s5(n+1,x,e,fn));
    }

    void main()
    {float e=1.e-5;
    fout.open("15.res");
    if(!fout)
    {cout<<"oshibka otkrbItij fajla rezylbtatov";exit(0);}
    fout<<"\t\t\tRezylbtatbI dlj e="<<e<<'\n'
    <<"|-----|----------|----------|----------|----------|----------|----------|"<<'\n'
    <<"| x | arccos | s1 | s2 | s3 | s4 | s5 |"<<'\n'
    <<"|-----|----------|----------|----------|----------|----------|----------|";
    for(float x=0.1; x<1; x+=1)
    {
    fout<<endl<<'|'<<setw(3)<<x<<setw(3)<<'|'<<setw(10)<<acos(x)<<'|'
    <<setw(10)<<s1(x,e)<<'|'<<setw(10)<<s2(x,e)<<'|'
    <<setw(10)<<s3(1,x,e,next)<<'|'<<setw(10)<<s4(1,x,e,next)<<'|'
    <<setw(10)<<s5(1,x,e,next)<<'|';
    }
    fout<<'\n'<<"|-----|----------|----------|----------|----------|----------|----------|";
    fout.close();
    }[/codebox]
     
Загрузка...
Похожие Темы - C++ Ошибка рекурсивной
  1. artik009
    Ответов:
    1
    Просмотров:
    1.005
  2. lisica198808
    Ответов:
    1
    Просмотров:
    1.375
  3. vladis222
    Ответов:
    3
    Просмотров:
    2.023
  4. 203
    Ответов:
    0
    Просмотров:
    1.049
  5. alekssgor
    Ответов:
    1
    Просмотров:
    2.356

Поделиться этой страницей