Далеко не элементарщина....

  • Автор темы Mcicool
  • Дата начала
M

Mcicool

Гость
#1


Тут я вообще не понимаю, что надо делать...
 

grigsoft

Well-Known Member
15.11.2005
735
0
#2
Обычная последовательность - следующий член вычисляется по предыдущим. Хочешь через рекурсию, хочешь - последовательно. Только подумать надо самому немножко.

Посчитай сначала ручками V(5), например, для понимания о чем речь.
 
Z

ZZmiy

Гость
#3
:) Это у меня глюки, или последовательности состоят из нулей ? :blink:
 
M

Mcicool

Гость
#6
Хмм, мдя, а может быть так и надо, чтобы программа в итоге показывала, что каждое число 0.

Примерно хоть покажите текст программы (через рекурсию желательно), чтобы там покумекал.
 
Z

ZZmiy

Гость
#7
С помощью рекурсии: (хотя, конечно, она тут абсолютно не нужна)

Код:
double u(int i)
{ 

  // тут определяются начальные значения последовательности
  if (i<3)
    return 0; 

  double utemp = u(i-1);// чтобы уменьшить число рекурсивных вызовов
  double vtemp = v(i-2);

  return (utemp-u(i-2)*vtemp-v(i-2))/(1+utemp*utemp+vtemp*vtemp);
}

double v(int i)
{
// тут определяются начальные значения последовательности
 if (i < 3)
   return 0;

 double vtemp = v(i-1););// чтобы уменьшить число рекурсивных вызовов
 return (u(i-1)+vtemp)/(abs(u(i-2)-vtemp)+1);
}

З.Ы. Ну и, конечно, стоит уточнить начальные условия :)
 
M

Mcicool

Гость
#8
А если не через рекурсию, то как же ???
 
M

Mcicool

Гость
#10
Да я просто совсем этой темы не понимаю... (((
 
T

Trupik

Гость
#11
<!--QuoteBegin-Mcicool+7:05:2006, 00:45 -->
<span class="vbquote">(Mcicool @ 7:05:2006, 00:45 )</span><!--QuoteEBegin-->Да я просто совсем этой темы не понимаю... (((
[snapback]35151" rel="nofollow" target="_blank[/snapback]​
[/quote]
Какой именно?
 
R

ru_looking_for

Гость
#12
Вот код без рекурсии. Вместо U1, V1, U2, V2 - подставляешь начальные условия, n - до какого члена считать, а в переменные Un и Vn запишутся конечные значения. Функция вернет true если все нормально или false, если n - недопустимо.

Код:
#include <math.h>

bool GetUnVn(double U1, double V1, double U2, double V2, int n, double &Un, double &Vn)
{
double Ui_1, Vi_1, Ui_2, Vi_2, Ui, Vi;

Ui_1 = U2;
Vi_1 = V2;
Ui_2 = U1;
Vi_2 = V1;

if (n < 3)
return false;

for (int i = 3; i <= n; i++)
{
Ui = (Ui_1 - Ui_2*Vi_1 - Vi_2)/(1 + Ui_1*Ui_1 + Vi_1*Vi_1);
Vi = (Ui_1 - Vi_1)/(fabs(Ui_2 + Vi_2) + 2);

Ui_2 = Ui_1;
Vi_2 = Vi_1;

Ui_1 = Ui;
Vi_1 = Vi;
}

Un = Ui;
Vn = Vi;

return true;
}
 
M

Mcicool

Гость
#13
Большое всем спасибо, тему можно завкрывать!