Вычислить значение выражения с помощью рекурсивной функции - 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; }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Определяется константа EPS, которая задает требуемую точность вычислений
- Объявляется рекурсивная функция calc_ln для вычисления натурального логарифма, принимающая два аргумента: a и eps
- В функции main запрашивается значение переменной a у пользователя с помощью функции scanf
- Проверяется, находится ли введенное значение a в диапазоне -1 < a <= 1. Если нет, то выводится сообщение об ошибке и программа завершается с кодом EXIT_FAILURE
- Если условие выполняется, то вызывается функция calc_ln с передачей в нее значения a и EPS
- Результат вычисления функции calc_ln выводится на экран с помощью функции printf
- В функции calc_ln инициализируются две переменные: числитель curr и знаменатель i. Начальное значение числителя равно 1.0, а знаменателя - 1
- В цикле рекурсивно вызывается функция calc_ln с передачей в нее значения a и EPS. При этом числитель curr умножается на значение a, а знаменатель i увеличивается на единицу
- Проверяется, достигнута ли необходимая точность вычислений. Если да, то рекурсия прерывается и возвращается текущий элемент ряда
- Если условие не выполняется, то вычисляется следующий элемент ряда и результат суммируется с текущим элементом ряда
- Функция calc_ln возвращает полученный результат
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д