Рекурсия в домашнем задании

modulus100

Расскажу суть , нужно ввести X (|X|<1) и Epsilon (0
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
float A[16];
 
void AB(float x, float e);
int fact(int n);
 
int main()
{
    float x ,e;
 
 
    do{
        printf("Vvedite X!\n");
        scanf("%f", &x);
    }while(x >= 1 || x <= -1);
 
    do{
        printf("Vvedite Epsilon!\n");
        scanf("%f", &e);
    }while(e >= 1 || e <= 0);
 
     AB(x,e);
     return 0;
}
 
void AB(float x, float e)
{
    int i = 1;
    A[0] = 1;
    A[i] = pow(-1,i)*(pow(x,2*i))/(fact(2*i));
 
    if (fabs(A[i] - A[i-1]) <= e || i == 15){
        printf("konec algoritma");
        return;
    }
    i++;
    AB(x,e);
}
 
int fact(int n) {
    return !n ? 1 : n * fact(n - 1);
}
Вчера переделал алгоритм , хотел бы узнать , можно ли это назвать работой программы с помощью рекурсии. Вместо того чтобы печатать на экран , программа теперь создает файл с массивом.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
float *A;
int ii = 1, i = 1;
 
int fact(int n);
void Formula(float x, float e);
 
int main()
{
    float x ,e;
    char fname[] = "homework2.txt";
 
    A = (float *)malloc(16*sizeof(float)); // Выделяет память массиву
 
    do{
        printf("Vvedite X, ( |X| < 1) \n");
        scanf("%f", &x);
    }while(x >= 1 || x <= -1);
 
    do{
        printf("Vvedite Epsilon, (0 < Epsilon < 1) \n");
        scanf("%f", &e);
    }while(e >= 1 || e <= 0);
 
    Formula(x,e);
 
    FILE *MyFile;
 
    if((MyFile = fopen( fname, "w" )) == NULL )
    {
        printf( "Owibka pri sozdanii faila\n" );
        return 1;
    }
    for (i = 0; A[i] != 99 ; i++ )
        fprintf(MyFile,"A[%d] = %f\n", i, A[i]);
 
    fclose(MyFile);
    printf("\nFile homework2.txt has been created\n\n");
    system("pause");
    return 0;
}
 
void Formula(float x, float e)
{
    A[0] = 1;
    A[i] = pow(-1,i)*(pow(x,2*ii))/(fact(2*ii)); // Основная формула 
 
    if (fabs(A[i] - A[i-1]) <= e || i == 15){ //Условие по модулю и пределу
        A[i+1] = 99;
        return ;
    }
    i++;
    ii = ii * 2;
    Formula(x,e);
}
 
int fact(int n) {  // считает факториал
    return !n ? 1 : n * fact(n - 1);
}
1 ответ

modulus100

****** A(****** x, int index)
{
   if (index < 0)
      return 0;
   else if (index == 0)
      return 1;
   else
      return -1. * A(x, index-1) * x * x / (index*2*(index*2 - 1));
}