Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.10.2016, 02:49   #71
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ребят, вот еще вторая рекурсия, переполняется регистр, по формуле - все так, но не работает. Второй ряд на фото

Код:

#include <stdio.h>
#include <math.h>

float recurs(int i, int j,float x)
{

    float a=(pow(x,i))/(pow(5.0,j-1)*sqrt(j));
    printf("\n%f",a);

    if (a < 0.01)
        return 0;
    else if (i % 2)
        return a + recurs(i + 2,j+1,x);
    else
        return -a + recurs(i + 2,j+1,x);

}


int main()
{

    printf("Welcome! Input X...");
    float x=0;
    scanf("%f",&x);
    printf("\nDone: %f",1-recurs(1,2,x));


    return 1;
}
Изображения
Тип файла: jpg BLWR7pa4cDI.jpg (20.9 Кб, 29 просмотров)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 06.10.2016, 03:38   #72
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Если x>sqrt(5), то у тебя каждый член ряда будет становится больше, а не меньше, поэтому условие остановки не случается.

Можешь график 3^(2*x)/5^x построить в вольфраме и посмотреть поведение.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 06.10.2016, 03:45   #73
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Вроде с Маткадом сошлось.

22.jpg
ura_111 вне форума Ответить с цитированием
Старый 06.10.2016, 04:07   #74
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Так, а с кодом как быть?
Выводит какую-то дичь.

+ у Вас в коде нет проверки на четность/ не четность выражения


зачем sqrt (A*A)? Ведь это есть как корень (2*2)=2, ...т.е. само число под корнем.

Вы дичь втираете :D) Обратите внимание на пример
Изображения
Тип файла: jpg Безымянный.jpg (45.8 Кб, 26 просмотров)
from dark to light)

Последний раз редактировалось Алексей_2012; 06.10.2016 в 04:12.
Алексей_2012 вне форума Ответить с цитированием
Старый 06.10.2016, 04:08   #75
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

С каким кодом? c++?
- Смотри фотку. Правь по ней.
ura_111 вне форума Ответить с цитированием
Старый 06.10.2016, 04:31   #76
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

"Вы дичь втираете".

Не понимаю к чему это. Если бы ты сказал: "я набрал, но мне такое выводит..." я бы понял, а так.

Алексей_2012, просто перенабери программу и всё. Когда попросит ввести "x" поставь "0.96". И наслаждайся увиденным.

Теперь по-поводу sqrt (A*A). Это называется модуль из числа, братан. У тебя "а" принимает как положительные так отрицательные значения, поэтому просто

a < 0.01

не катит.

Последний раз редактировалось ura_111; 06.10.2016 в 04:42.
ura_111 вне форума Ответить с цитированием
Старый 06.10.2016, 05:12   #77
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Посмотри Алексей_2012, я избавился от "sqrt (A*A)". Это ты хотел?

25.jpg
ura_111 вне форума Ответить с цитированием
Старый 06.10.2016, 23:39   #78
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

А где чередование "+" и "-"?
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 06.10.2016, 23:43   #79
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

А это что по твоему?

Код:
pow(-1, j-1)
Промодулируй при разных j (2,3,4,5....). В первой программе этот код стоял вверху тела функции "recurs", а во втором листинге - внизу (обрати на это внимание - сопоставь две мои программы).

p.s.1: Запомни! Никогда не используй 2-й вызов рекурсии. Иначе 100% ошибёшься. Недавно был пример на эту тему:

http://www.programmersforum.ru/showthread.php?t=297838

Посмотри как растёт программы (я рисовал её работу); сколько труда было потрачено чтобы разобраться с 2-й рекурсией (и представь себе как бы облегчилась программа если бы там был только 1-н вызов самой себя).


p.s.2: Первый листинг, который я привёл, мне нравиться больше. Он как бы более правильный. Вспомни, ты же прибавляешь рекуррентную сумму к 1-це (1+recurs), а в выражении "recurs" есть как положительные так и отрицательные переменные, что и было выведено на экран.

Последний раз редактировалось ura_111; 07.10.2016 в 00:22.
ura_111 вне форума Ответить с цитированием
Старый 08.10.2016, 15:53   #80
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

Ваш код последний - сбоит, как только ввожу х=3, например и получается то, что у меня на скрине выше
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
рекурсия Ника-Вероника Паскаль, Turbo Pascal, PascalABC.NET 6 23.03.2012 21:43
Рекурсия unbanned Паскаль, Turbo Pascal, PascalABC.NET 7 19.01.2012 11:25
Рекурсия dusya9992 Паскаль, Turbo Pascal, PascalABC.NET 4 29.08.2010 14:14
Рекурсия Solnze2 Паскаль, Turbo Pascal, PascalABC.NET 0 09.06.2010 09:28
Рекурсия Shadows_Behind Помощь студентам 6 26.05.2010 15:07