Форум программистов, компьютерный форум CyberForum.ru

рекурсия - C++

Восстановить пароль Регистрация
 
lenoch
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 8
05.05.2010, 22:38     рекурсия #1
Помогите пожалуйста сделать рекурсию
Даны n и m, найти X[n] и Y[m], при
X[1]1=Y[1]=1
X[i]=X[i-1]+Y[i-1]/i^2
Y[i]=Y[i-1]=X[i-1]/i^2
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2010, 22:38     рекурсия
Посмотрите здесь:

Рекурсия C++
C++ рекурсия
Рекурсия C++
Рекурсия C++
Рекурсия C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
06.05.2010, 21:15     рекурсия #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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//MS VS
#include "stdafx.h"
#include <iostream>
 
double Y(unsigned i);
 
double X(unsigned i)
{    
    return (i == 1) ? 1 : X(i - 1) + Y(i - 1) / i * i;
}
 
double Y(unsigned i)
{    
    return (i == 1) ? 1 : Y(i - 1) - X(i - 1) / i * i;    
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    unsigned n;
    unsigned m;
    for(;;)
    {
        std::cout 
            << std::endl
            << std::endl
            << std::endl
            << "Input int n > 0: ";        
        std::cin >> n;
        if(n < 1) continue;        
 
        std::cout << "Input int m > 0: ";
        std::cin >> m;
        if(m < 1) continue;        
        std::cout ;
 
        std::cout << std::endl
                  << "X["
                  << n
                  << "] = "                  
                  << X(n);
 
        std::cout << std::endl
                  << "Y["
                  << m
                  << "] = "
                  << Y(m);
    }//for
    return 0;
}
lenoch
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 8
06.05.2010, 22:11  [ТС]     рекурсия #3
спасибо большое, для зачета не хватало
lenoch
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 8
08.05.2010, 13:48  [ТС]     рекурсия #4
как оказалось высчитывает не правильно
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
08.05.2010, 18:40     рекурсия #5
А что неправильно?
lenoch
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 8
08.05.2010, 19:30  [ТС]     рекурсия #6
сам результат вычисления, тут вроде рекурсия типа struct со статическими переменными
lenoch
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 8
24.06.2010, 00:10  [ТС]     рекурсия #7
подниму тему, попробовала сделать через структуру но всеравно не получается

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
[CPP]struct vozvrat
{
    int n;
    double x,y;
};
 
struct vozvrat Decision(double n)
{
    static struct vozvrat tmp;
    static double xp, yp;
    static int nom=0;
    tmp.n=nom;
    if (tmp.n==0) tmp.x=1;
    xp=tmp.x;
    tmp.x=(xp+yp/pow(n,2));
    if (tmp.n==0) tmp.y=1;
    yp=tmp.y;
    tmp.y=(yp+xp/pow(n,2));
    tmp.n=nom;
    if (nom <= n) 
        return tmp;
    else 
    {
        nom++;
        return Decision(n);
    }
}
[/CPP]
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9371 / 5421 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
24.06.2010, 03:05     рекурсия #8

Не по теме:

Цитата Сообщение от lenoch Посмотреть сообщение
рекурсия типа struct со статическими переменными
это чё такое?!!



Добавлено через 3 минуты
Цитата Сообщение от Mr.X Посмотреть сообщение
return (i == 1) ? 1 : X(i - 1) + Y(i - 1) / i * i
Конечно не правильно считает. Скобки вокруг i * i поставьте - и будет Вам счастье!
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
24.06.2010, 03:41     рекурсия #9
Цитата Сообщение от easybudda Посмотреть сообщение

Не по теме:


это чё такое?!!



Добавлено через 3 минуты

Конечно не правильно считает. Скобки вокруг i * i поставьте - и будет Вам счастье!
Признаю свою ошибку. Теперь действительно правильно считает.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1330 / 863 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
24.06.2010, 04:14     рекурсия #10
Цитата Сообщение от easybudda Посмотреть сообщение

Не по теме:

рекурсия типа struct со статическими переменными
это чё такое?!

!
Первое что в голову приходит - так это метапрограммирование..

Не по теме:

( хотя может я и не прав... ) но все-же..



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
template <int N>
class Factorial {
public:
    enum { Result = N * Factorial<N - 1>::Result };
};
 
template <>
class Factorial<0> {
public:
    enum { Result = 1 };
};
 
int main() {
 
    std::cout << Factorial<5>::Result << std::endl;
    return 0;
}
http://codepad.org/6OUn51fD
Хохол
Эксперт C++
 Аватар для Хохол
475 / 443 / 13
Регистрация: 20.11.2009
Сообщений: 1,292
24.06.2010, 04:17     рекурсия #11
ISergey, вау, прикольно.
lenoch
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 8
24.06.2010, 12:45  [ТС]     рекурсия #12
действительно со скобками все работает, но преподователь у нас такой, что любит все усложнить и требует через структуру
Mr.X
Эксперт С++
 Аватар для Mr.X
2798 / 1574 / 246
Регистрация: 03.05.2010
Сообщений: 3,651
24.06.2010, 16:46     рекурсия #13
Цитата Сообщение от lenoch Посмотреть сообщение
действительно со скобками все работает, но преподователь у нас такой, что любит все усложнить и требует через структуру
Ну тогда пускай расскажет, что это за структура такая.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2010, 22:31     рекурсия
Еще ссылки по теме:

Рекурсия C++
C++ Рекурсия
C++ Рекурсия

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

Или воспользуйтесь поиском по форуму:
lenoch
0 / 0 / 0
Регистрация: 05.05.2010
Сообщений: 8
30.06.2010, 22:31  [ТС]     рекурсия #14
преподователь говорит нельзя прямой рекурсией и нужно в 1 функцию сделать, решила сделать на основе работы одногруппника
"В последовательности x(1), x(2)..., образованой по закону x(0)=а, x(i)=(k-1)/k*x(i-1)+a/x(i-1)^k i=1,2,..., найти первый член x(n), для которого выполнено неравенство |x(n)^k-k*a|<10^(-m)"

вот его функция

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
struct vozvrat
{
    int n;
    double x;
};
 
struct vozvrat Decision(double a, double k, double m)
{
    static struct vozvrat tmp;
    static double xp;
    static int nom=0;
    tmp.n=nom;
    if (tmp.n==0) tmp.x=a;
    xp=tmp.x;
    tmp.x=((k-1)/k)*xp+(a/pow(xp,k-1));
    tmp.n=nom;
    if (fabs(pow(tmp.x,k)-k*a)<pow(10,-m)) 
        return tmp;
    else 
    {
        nom++;
        return Decision(a,k,m);
    }
}
вот то что я попыталась сделать

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
struct vozvrat
{
    int n;
    double x,y;
};
 
struct vozvrat Decision(int n)
{
    static struct vozvrat tmp;
    static double xp, yp; //я взяла xp как x(i-1)
    static int nom=0;// это счетчик
    tmp.n=nom;
    if (tmp.n==0) tmp.x=1;
    xp=tmp.x;
    tmp.x=xp+yp/(n*n);
    if (tmp.n==0) tmp.y=1;
    yp=tmp.y;
    tmp.y=yp+xp/(n*n);
    tmp.n=nom;
    if (nom = n) 
        return tmp;
    else 
    {
        nom++;
        return Decision(n);
    }
}
Yandex
Объявления
30.06.2010, 22:31     рекурсия
Ответ Создать тему
Опции темы

Текущее время: 10:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru