Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.133.86.172] |
|
Сообщ.
#1
,
|
|
|
Программа должна вычислять значение функции arth(x) действительного аргумента |x|<1 с точностью ε с использованием рекурсии.
Нашел вот этот код, но он не работает. #include <stdio.h> #include <math.h> #define N 30 double Arth(double x) { double arth=x; double a=x; for (int i=1;i<N;i++) { a *= x*x; arth += a/(2*i+1); } return arth; } void main(void) { printf("Exact arth(0.4621171)=0.5, this arth(0.4621171)=%g.",Arth(0.4621171)); } |
Сообщ.
#2
,
|
|
|
Вообще-то он работает (я только изменил int main)
Только код нерекурсивный и не учитывает точность - итерации должны останавливаться, когда очередное слагаемое становится меньше заданной точности. Стоит отладиться на итеративном коде, изменив цикл. а затем уже делать рекурсию. |
Сообщ.
#3
,
|
|
|
Можете подправить или исправить код?
|
Сообщ.
#4
,
|
|
|
Уже ничего не надо, я написал программу:
#include <iostream> #include <math.h> using namespace std; int main() { float e; double sum = 0, a = 1, x; int i = 0; cout << "e = "; cin >> e; cout << "X<1= " << endl; cin >> x; a = x; do { sum += a; a *= x*x*(2.0*i + 1.0) / (2.0*i + 3.0); i++; } while (fabs(a) > e); cout << "arth(x) = " << sum << endl; system("pause"); return 0; } |
Сообщ.
#5
,
|
|
|
Так существенная же сторона задания - рекурсия - так и не выполнена!
|
Сообщ.
#6
,
|
|
|
Ну если вы знаете как сделать через рекурсию, сделайте пожалуйста.
|
Сообщ.
#7
,
|
|
|
Что-то вроде такого:
double art(double x, double eps, double nom, double denom) { double add = 0.0; if (fabs(nom) > eps * denom) add = art(x, eps, nom * x * x, denom + 2.0); return nom / denom + add; } arth = art(x, eps, x, 1.0) |