Люди, помогите, надо решить задачу по вычислению:
y(n+1)=(cos(y(n)))^2/(x+y(n))
где х=3.4, при п=0 у0=0.7
выполнять, пока |y-y0|>e, где е=0.00001
ИСПОЛЬЗУЯ РЕКУРЕНТНОЕ ВЫРАЖЕНИЕ!!!

У меня идёт переполнение стека, т.к. ф-ция вызывает себя 2 раза..
Давай уточним: надо использовать
рекурентное соотношение или
рекурсию в программе?
И ещё одно уточнение. Когда программа должна заканчивать работу: когда
|y(n)-y0| < e или
|y(n)-y(n-1)| < e? Вычисления, которые я провел, показывают, что первое условие не достигается никогда.
Вот код, который написан для случая:
1) Используется рекурентное соотношение. Рекурсия в программе не используется
2) Программа останавливается при выполнении условия |y(n)-y(n-1)| < e
#include <math.h>
#include <iostream>
using namespace std;
double f(double x, double y_prev)
{
return cos(y_prev) * cos(y_prev) / (x + y_prev);
}
int main()
{
double x = 3.4;
double y0 = 0.7;
double eps = 1e-5;
double y_curr = y0;
double y_prev;
do
{
y_prev = y_curr;
y_curr = f(x, y_prev);
} while (fabs(y_curr - y_prev) > eps);
cout << "y = " << y_curr << endl;
return 0;
}
Ответ, который выдает программа: y = 2.5599
Большое спасибо
Но не могли бы вы сказать мне, можно ли использовать в данном случае именно РЕКУРСИЮ В ПРОГРАММЕ. Т.к. вариант кода подобный вашему я уже использовал
P.S. |y(n)-y(n-1)| < e
Дискуссия подцеплена к исходной теме. — _MM_ & Кодт
Здравствуйте, Empty, Вы писали:
E>Большое спасибо
E>Но не могли бы вы сказать мне, можно ли использовать в данном случае именно РЕКУРСИЮ В ПРОГРАММЕ. Т.к. вариант кода подобный вашему я уже использовал
E>P.S. |y(n)-y(n-1)| < e
Вариант с tail recursion:
#include<iostream>
#include<math.h>
static const double err=0.00001,x=3.4;
double fun(double prev)
{
const double cur=(cos(prev)*cos(prev))/(x+prev);
return fabs(cur-prev)<err
?cur
:fun(cur);
}
int main()
{
std::cout<<fun(0.7)<<std::endl;
return 0;
}
Здравствуйте, Empty, Вы писали:
E>Люди, помогите, надо решить задачу по вычислению:
E>y(n+1)=(cos(y(n)))^2/(x+y(n))
E>где х=3.4, при п=0 у0=0.7
E>выполнять, пока |y-y0|>e, где е=0.00001
E>ИСПОЛЬЗУЯ РЕКУРЕНТНОЕ ВЫРАЖЕНИЕ!!!
E>
У меня идёт переполнение стека, т.к. ф-ция вызывает себя 2 раза..
По моему, это в юмор.