Вычислить значение выражения с помощью рекурсивной функции - C (СИ) (152962)

Узнай цену своей работы

Формулировка задачи:

S=ln(1+a)

Решение задачи: «Вычислить значение выражения с помощью рекурсивной функции»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
#define EPS 0.0000001 // точность вычисления
//
// рекурсивная функция вычисления
double calc_ln( const double a, const double eps );
 
int main( void ) {
 
    double a;
    printf( "Введите a " );
    scanf( "%lf", &a );
 
    // проверяем входит ли в нужный нам диапазон число a
    if ( a > 1 || a <= -1 ) { // если нет, то сообщаем пользователю
        fprintf( stderr, "Число должно быть в диапазоне -1 < a <= 1\n" );
        return EXIT_FAILURE; // выходим из программы
    }
 
    // иначе все в порядке - вычисляем значение и выводим на экран
    printf( "Ln( 1 + %g ) = %.10f\n", a, calc_ln( a, EPS ) );
 
    return EXIT_SUCCESS;
}
 
double calc_ln( const double a, const double eps ) {
    // для текущего элемента ряда
    static double curr = 1.0; // числитель
    static int i = 1; // знаментатель
 
    // вычисляем
    curr *= a; // числитель
    double curr_elem = curr / i++; // знаменатель
 
    // проверяем достигнута ли необходимая точность
    // если да, то прерываем рекурсию возвращая текущий элемент ряда
    // иначе вычисляем следующий элемент ряда и суммируем его с текущим
    return fabs( curr_elem ) <= eps ? curr_elem : curr_elem + calc_ln( a, eps ) * -1;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы
  2. Определяется константа EPS, которая задает требуемую точность вычислений
  3. Объявляется рекурсивная функция calc_ln для вычисления натурального логарифма, принимающая два аргумента: a и eps
  4. В функции main запрашивается значение переменной a у пользователя с помощью функции scanf
  5. Проверяется, находится ли введенное значение a в диапазоне -1 < a <= 1. Если нет, то выводится сообщение об ошибке и программа завершается с кодом EXIT_FAILURE
  6. Если условие выполняется, то вызывается функция calc_ln с передачей в нее значения a и EPS
  7. Результат вычисления функции calc_ln выводится на экран с помощью функции printf
  8. В функции calc_ln инициализируются две переменные: числитель curr и знаменатель i. Начальное значение числителя равно 1.0, а знаменателя - 1
  9. В цикле рекурсивно вызывается функция calc_ln с передачей в нее значения a и EPS. При этом числитель curr умножается на значение a, а знаменатель i увеличивается на единицу
  10. Проверяется, достигнута ли необходимая точность вычислений. Если да, то рекурсия прерывается и возвращается текущий элемент ряда
  11. Если условие не выполняется, то вычисляется следующий элемент ряда и результат суммируется с текущим элементом ряда
  12. Функция calc_ln возвращает полученный результат

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы