Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C (СИ) Создать программу, которая подсчитывает количество слов в строке с нечетным количеством символов https://www.cyberforum.ru/ c-beginners/ thread1132213.html
Нужно создать программу на Си, которая подсчитывает количество слов в строке с нечетным количеством символов. Использовать только стандартную библиотеку stdio.h и вычислять через "флаги". Скелет...
Рекурсия. Вычислить наибольший общий делитель двух натуральных чисел C (СИ)
1) S=a!-cos(a) 2) Вычислить наибольший общий делитель двух натуральных чисел
C (СИ) Найти сумму цифр заданного числа (рекурсия)
Найти сумму цифр заданного числа
C (СИ) Набрать с клавиатуры предложение и произвести в нем поиск слова в котором будет наиболшее количество гласных букв Задание:Набрать с клавиатуры предложение и произвести в нем поиск слова в котором будет наиболшее количество гласных букв. Код нужно написать с использованием функций. (Желательно расписать смысл... https://www.cyberforum.ru/ c-beginners/ thread1132159.html
C (СИ) Написать программу вычисления разности https://www.cyberforum.ru/ c-beginners/ thread1132158.html
S=x!-sin(x)
Вывести число в обратном порядке C (СИ)
найти число которое образуется при записи цифр заданного натурального числа в обратном порядке
Написать функцию replace(str1, str2,str3), заменяющая в строке str1 все вхождения строки str2 строкой str3 C (СИ)
Написать функцию replace(str1, str2,str3), заменяющая в строке str1 все вхождения строки str2 строкой str3.Функция возвращает указатель str1
C (СИ) Можно ли преобразовать программу, убирающую пробелы, используя только 1 функцию Можно ли преобразовать программу, убирающую пробелы, используя только 1 функцию getline (чтобы избежать дублежа)? #include <stdio.h> #define MAXLINE 1000 /* максимальный размер вводимой строки... https://www.cyberforum.ru/ c-beginners/ thread1132115.html
C (СИ) Удалить из массива все дубликаты элементов, оставив только первое вхождение https://www.cyberforum.ru/ c-beginners/ thread1132102.html
Дан целочисленный массив размера N. Удалитьиз массива все дубликаты элементов, оставив только первое вхождение. Прошу не пишите сложно.
C (СИ) Дано натуральное число n. Вычислить выражение Дано натуральное число n. Вычислить (1+1/1^2)*(1+1/2^2)*...*(1+1/n^2) https://www.cyberforum.ru/ c-beginners/ thread1132070.html
186 / 167 / 107
Регистрация: 15.03.2014
Сообщений: 361
28.03.2014, 19:42 0

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

28.03.2014, 19:42. Просмотров 1620. Ответов 1
Метки (Все метки)

Ответ


Есть ряд Тейлора для данного выражения, который сходится только при -1 < a <= 1, соответственно и вычислять значение выражения с помощью данного ряда можно только когда число a входит в данный диапазон.
https://www.cyberforum.ru/cgi-bin/latex.cgi?ln\left( 1 + a \right) = x - \frac{{x}^{2}}{2} + \frac{{x}^{3}}{3} - \frac{{x}^{4}}{4}+...

Думаю, что в задании подразумевается именно с помощью данного ряда рекурсивное вычисление.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#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;
}


Вернуться к обсуждению:
Вычислить значение выражения с помощью рекурсивной функции
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2014, 19:42

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Помогите вычислить значение выражения с помощью функции...
Помогите вычислить коротко с помощью функции. Слаб в этих дробях многоэтажных.

Вычислить значение выражения с помощью подпрограммы-функции
Даны действительные числа s, t. Получить f (t-2s, s + 1.2t) + f (t, st + 2.5), где f (a, b) = ab /...

Вычислить значение выражения с помощью функции и обезопасить ввод
:wall: не понимаю этих уравнений! Нужно написать функцию, которая вычисляет значение выражения,...

Написать программу для вычисления выражения с помощью рекурсивной функции
Помогите написать программу C++ для вычисления выражения an. Вычисление организовать в виде...

С помощью рекурсивной функции вывести значение функции sin(x) от А до B включая с шагом step
Дан прототип функции void print_tab (float A, float B, float step) Как с помощью рекурсии...

С помощью рекурсивной функции вычислить сумму элементов одномерного массива
С помощью рекурсивной функции вычислить сумму элементов одномерного массива,помогите...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.