From 662f1b7c618c655aed03b94c0ae5158de2a1514e Mon Sep 17 00:00:00 2001 From: dajavo <dajavo@taltech.ee> Date: Thu, 27 Mar 2025 16:23:08 +0200 Subject: [PATCH] Add new file --- recursive code | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 recursive code diff --git a/recursive code b/recursive code new file mode 100644 index 0000000..2d25f8e --- /dev/null +++ b/recursive code @@ -0,0 +1,71 @@ +#include <stdio.h> +#include <math.h> +#include <stdlib.h> + +#define MAX_LAYERS 15 + +double calculateA(int L, double X); +void calculateArrayRecursive(double X, double* A, double e, int L, int* numLayers); +void getInput(double* X, double* e); +void saveToFile(double* A, int numLayers); + +int main() { + double X, e, A[MAX_LAYERS]; + int numLayers = 0; + + getInput(&X, &e); + calculateArrayRecursive(X, A, e, 1, &numLayers); + saveToFile(A, numLayers); + + return 0; +} + +void getInput(double* X, double* e) { + printf("Enter the value of X (|X| < 1): "); + scanf("%lf", X); + + printf("Enter the value of e (0 < e < 1): "); + scanf("%lf", e); + + if (fabs(*X) >= 1 || *e <= 0 || *e >= 1) { + printf("Invalid input! Ensure |X| < 1 and 0 < e < 1.\n"); + exit(1); + } +} + +double calculateA(int L, double X) { + double term = 1.0; + for (int i = 1; i < L; i++) { + term *= (2 * i - 1) / (double)(2 * i); + } + double A_L = pow(X, 2 * L - 1) * term / (2 * L - 1); + A_L *= pow(-1, L + 1); + return A_L; +} + +void calculateArrayRecursive(double X, double* A, double e, int L, int* numLayers) { + if (L > MAX_LAYERS) return; + A[L - 1] = calculateA(L, X); + if (L > 1 && fabs(A[L - 1] - A[L - 2]) > e) { + printf("Stopping at L = %d because |A_L - A_{L-1}| > e\n", L); + return; + } + + (*numLayers)++; + calculateArrayRecursive(X, A, e, L + 1, numLayers); +} + +void saveToFile(double* A, int numLayers) { + FILE *f = fopen("F.txt", "w"); + if (f == NULL) { + printf("Error opening file.\n"); + exit(1); + } + + fprintf(f, "Number of elements: %d\n", numLayers); + for (int i = 0; i < numLayers; i++) { + fprintf(f, "A%d = %.10lf\n", i + 1, A[i]); + } + fclose(f); + printf("Results saved to F.txt\n"); +} -- libgit2 0.25.0