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

Как обойти рекурсию? - C++

Восстановить пароль Регистрация
 
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
28.11.2013, 20:03     Как обойти рекурсию? #1
Как обойти рекурсию?
C++
1
2
3
4
double f(x)
{
return sin(x) + f(sin(x));
}
можно ли сделать без этого как-нибудь?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
28.11.2013, 23:07  [ТС]     Как обойти рекурсию? #2
или реализуйте, пожалуйста, в код это:

1. sin(x) = t1
2. sin(t1) = sin(sin(x)) = t2
3. sin(t2) = sin(sin(sin(x))) = t3
4. sin(t3) = sin(sin(sin(sin(x)))) = t4
...
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.11.2013, 23:26     Как обойти рекурсию? #3
Ну, вообще-то задание некорректно, т.к. в условии ничего не сказано о выходе из такой рекурсии.
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
28.11.2013, 23:34  [ТС]     Как обойти рекурсию? #4
вот я и запутался...
а как на счёт этого задания, если ввести действительное x и натуральное n?
Название: 2013-11-28 21_31_35-Methods_AP_DKR1 - WinDjView.png
Просмотров: 47

Размер: 5.9 Кб
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
28.11.2013, 23:36     Как обойти рекурсию? #5
p1ka4y777, правильноKuzia domovenok, у тебя спросил
закончим то когда?
можно например так
C++
1
2
3
4
5
for( )//условие цикла поставь сам
{
 sum+=sin(x);
 x=sin(x);
}
Добавлено через 1 минуту
а ты уверен что это две одинаковые функции???
sin2 не совсем sin(sin)
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
28.11.2013, 23:45  [ТС]     Как обойти рекурсию? #6
Цитата Сообщение от ValeryS Посмотреть сообщение
а ты уверен что это две одинаковые функции???
конечно нет

хотел увидеть наглядно код для sin2 просто...
ValeryS
Модератор
6376 / 4842 / 442
Регистрация: 14.02.2011
Сообщений: 16,045
28.11.2013, 23:50     Как обойти рекурсию? #7
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
хотел увидеть наглядно код для sin2 просто...
ну для степени как то так
C++
1
2
for(int i=1;i<=n;i++)
 summ+=pow(sin(x),i);
EVP
314 / 236 / 41
Регистрация: 14.12.2010
Сообщений: 457
29.11.2013, 02:10     Как обойти рекурсию? #8
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
Вложение 334716
C++
1
2
3
4
double f(x)
{
return sin(x) + f(sin(x));
}
можно ли сделать без этого как-нибудь?
Можно:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <math.h>
 
template<class T>
T calcSum(T x)
{
    T result = 0;
    T cur = x;
    int count = 0;
    while (true)
    {
        T old = cur;
        cur = std::sin(cur);
        if (old == cur)
            break;
        result += cur;
        count++;
    }
    std::cout << "calcSum iterations: " << count << std::endl;
    return result;
}
 
template<class T>
void run()
{
    std::cout << "input x: ";
    T x;
    std::cin >> x;
    T res = calcSum(x);
    std::cout << "f(x) = sin(x) + sin(sin(x)) +.. sin(sin(..sin(x))) = " << res << std::endl;
    std::cout << "sin(" << x << ") = " << std::sin(x) << std::endl;
}
 
int main()
{
    run<float>();
    system("pause");
}
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
29.11.2013, 02:17  [ТС]     Как обойти рекурсию? #9
ого, умный Вы... спасибо большое)
желанно парочку коментарий...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2013, 16:04     Как обойти рекурсию?
Еще ссылки по теме:

C++ Как заменить цикл while на рекурсию?
"Stack overflow" как обойти? C++
C++ Как обойти администратора ?

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

Или воспользуйтесь поиском по форуму:
EVP
314 / 236 / 41
Регистрация: 14.12.2010
Сообщений: 457
29.11.2013, 16:04     Как обойти рекурсию? #10
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
желанно парочку коментарий...
Рассмотрим sin(sin(..sin(x))):
Результат sin(x) ограничен в [-1,1].
Результат sin([-1,1]) ограничен в [-sin(1),sin(1)], что лежит внутри [-1,1] симметрично нулю, знак результата не меняется.
По индукции, sin(sin(..sin(x))) в пределе даст нуль.
Сумма со знаком, который определяется по первому sin(x).
Yandex
Объявления
29.11.2013, 16:04     Как обойти рекурсию?
Ответ Создать тему
Опции темы

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