0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 38
1

Написать программу с рекурсией

03.11.2014, 14:16. Показов 527. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ЗаданиеОписать рекурсивные функции для определения pi, hi. Задать значение Z и вычислить C (формулы для определения рекурсивных функций и для определения C приведены ниже)

https://www.cyberforum.ru/cgi-bin/latex.cgi?P_1=1<br />
<br />
h_1=4<br />
<br />
P_i=\frac{i-1}{i+1}P_{i-1}+\sqrt{P_{i-1}}<br />
<br />
h_i=zh_{i-1}-\frac{h_{i-1}}{i}<br />
<br />
C=\frac{\sqrt{\left| p_4-z\right|}}{h_3}


Написал программу, без рекурсии, кажется что то не так. Посмотрите, пожалуйста:

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
#include "stdafx.h"
#include "iostream"
using namespace std;
double p(int);
double h(int);
double z;
 
int _tmain(int argc, _TCHAR* argv[])
{
double c;
cout<< "Vvedite z";
cin>>z;
c= (sqrt(abs(p(4)-z)))/h(3);
cout<<"c="<< c;
 
    system("pause");
}
 
double p(int i)
{
double p;
p= 1;
for(i;i>1;i--)
    p=((i-1)/(i+1))*p+sqrt(p);
return p;
}
 
double h(int i)
{
int h;
h= 4;
for(i;i>4;i--)
    h= z*h - h/i;
return h;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2014, 14:16
Ответы с готовыми решениями:

Написать программу с рекурсией
Помогите Написать программу с рекурсивной функцией перевода числа из десятичной системы счисления...

Нужно написать с рекурсией. Числа Люка
Помогите плиз!! Числа Люка определяются так: первое число равно 1, второе равно 3, каждое...

Написать два варианта программы: с рекурсией и без
Нужны два варианта программы.

Подскажите какую-нибудь программу с рекурсией на прологе
Нужна задача , не очень лёгкая , интересная , с рекурсией . если не сложно , подскажите

7
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 38
03.11.2014, 14:38  [ТС] 2
Вот еще подысправил:
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
#include "stdafx.h"
#include "iostream"
using namespace std;
double p(int);
double h(int);
double z;
 
int _tmain(int argc, _TCHAR* argv[])
{double c;
cout<< "Vvedite z";
cin>>z;
c= (sqrt(abs(p(4)-z)))/h(3);
cout<<"c="<< c;
 
    system("pause");
}
double p(int i)
{double p;
p= 1;
for(i=i;i>=1;i--)   
    p=((i-1)/(i+1))*p+sqrt(p);
return p;
}
double h(int i)
{int h;
h= 4;
for(i=i;i>=1;i--)
    h= z*h - h/i;
return h;
}
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 38
03.11.2014, 19:00  [ТС] 3
Вот написал программу:
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
#include "stdafx.h"
#include "iostream"
using namespace std;
double f(int);
double P[10],H[10];
int z;
 
int _tmain(int argc, _TCHAR* argv[])
{
    double c;
    cout<<"Enter z"<<endl;
    cin>>z;
    c= sqrt(abs(P[4]-z))/H[3];
    cout<<"c="<<c;
    system("pause");
}
double f(int i)
{
    if(i<10)
    { if(i==1)
     {P[1]= 1;
    H[1]= 4;}
    else 
        {P[i]= ((i-1)/(i+1))*P[i-1]+sqrt(P[i-1]);
    H[i]= z*H[i-1]-H[i-1]/i;}
    f(++i);
    }
    return P[i],H[i];
}
Выдает с= 1.#INF, что не так?
0
Модератор
Эксперт С++
13411 / 10521 / 6285
Регистрация: 18.12.2011
Сообщений: 28,095
03.11.2014, 19:06 4
1. Вы f из main не вызывали. H[3] равно нулю.
2.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
double f(int i)
{
    if(i<10)
    {
      if(i==1)
     {
           P[1]= 1;
           H[1]= 4;
     }else 
     {
             P[i]= ((i-1)/(i+1))*P[i-1]+sqrt(P[i-1]); // (i-1)/(i+1) равно нулю
             H[i]= z*H[i-1]-H[i-1]/i;
     }
     f(++i);
  }
 return P[i],H[i]; // может P[i]-H[i] ?
}
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 38
03.11.2014, 19:32  [ТС] 5
Вот тут подысправил немного, теперь что? На счет нуля, тут же в задании такая формула, ничего не поделаешь.
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
#include "stdafx.h"
#include "iostream"
using namespace std;
double f(int);
double P[10],H[10];
int z;
 
int _tmain(int argc, _TCHAR* argv[])
{
    double c;
    cout<<"Enter z"<<endl;
    cin>>z;
    c= sqrt(abs(f4)-z))/f(3);
    cout<<"c="<<c;
    system("pause");
}
double f(int i)
{
    if(i<10)
    { if(i==1)
     {P[1]= 1;
    H[1]= 4;}
    else 
        {P[i]= ((i-1)/(i+1))*P[i-1]+sqrt(P[i-1]);
    H[i]= z*H[i-1]-H[i-1]/i;}
    f(++i);
    }
    return P[i],H[i];// ваш комментарий тут не понял, зачем возвращать разность?
}
0
volvo
03.11.2014, 19:41
  #6
 Комментарий модератора 
Agry, хватит темы дублировать уже, завел одну - общайся в ней, совершенно необязательно на каждый измененный символ программы заводить новую тему.
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
03.11.2014, 19:47 7
Agry,
Цитата Сообщение от Agry Посмотреть сообщение
return P[i],H[i];
функция может вернуть только одно значение.
0
0 / 0 / 0
Регистрация: 09.10.2014
Сообщений: 38
04.11.2014, 15:08  [ТС] 8
Ага, значит надо написать 2 отдельные функции?

Добавлено через 19 часов 19 минут
Вот еще написал, что не так теперь?

#include "stdafx.h"
#include "iostream"
using namespace std;
double f(int);
double g(int);
double P[10],H[10];
int z;

int _tmain(int argc, _TCHAR* argv[])
{
double c;
cout<<"Enter z"<<endl;
cin>>z;
c= sqrt(abs(f(4)-z))/g(3);
cout<<"c="<<c;
system("pause");
}
double f(int i)
{
if(i<10)
{ if(i==1)
P[1]= 1;
else
P[i]= ((i-1)/(i+1))*P[i-1]+sqrt(P[i-1]);
f(++i);
}
return P[i];
}

double g(int i)
{
if(i<10)
{ if(i==1)
H[1]= 4;
else
H[i]= z*H[i-1]-H[i-1]/i;
f(++i);
}
return H[i];
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2014, 15:08
Помогаю со студенческими работами здесь

Написать класс по строительству домов. Написать программу, демонстрирующую работу с классом.
Собственно, в С++ немного насасываю, код читать умею, а прогать - нет. К сожалению, обстоятельства...

Нужно написать написать программу, которая вычисляет значение выражения в обратной польской записи
Обра́тная по́льская запись (англ. Reverse Polish notation, RPN) — форма записи математических и...

Написать программу для рисования данного орнамента, написать комментарии к каждому действию программы

не могу написать написать программу на вычисление U=max
вот условия: даны числа x,y,z. Вычислить U=max. (z,min (y,x)). Помогите, пожалуйста, решить ((((


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru