Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 06.10.2018, 19:11   #1 (permalink)
alexandor
Новичок
 
Регистрация: 06.10.2018
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Задача на рекуррентность

Помогите, пожалуйста с программой на С.
Во вложении описана данная функция. Нужно написать программу, которая принимает два аргумента и выводит значение функции.проблема в том, что программа работает медленно, и у меня проблема с пониманием как правильно использовать мемоизацию. то есть если значение не было посчитано раннее, нужно вычислять. На вводе программа будет запрашивать два числа ( 1<=n>=50 и i >=0). Пример ввода и вывода во вложении. Спасибо заранеею


int fm[50];

int F(int n, int i){
int f;
int fsum=0;
if (fm[f]==0){
if(i < n){
return i;
}else{
for(int j = 1; j <= n; j++){
f = j * F(n, i-j);
if(j%2==0){
f=-f;
}
fsum+=f;
fm[n]=fsum;

}}}
return fm[n];

}
Миниатюры
screenshot_6.jpg   screenshot_1.jpg   screenshot_2.jpg  
alexandor вне форума   Ответить с цитированием

Старый 06.10.2018, 19:11
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Прочитайте схожие топики, это не должно занять много времени

Задача
Задача на Си
задача на С++
Задача
Задача

Старый 06.10.2018, 19:55   #2 (permalink)
Николай_С
Member
 
Аватар для Николай_С
 
Регистрация: 25.09.2012
Адрес: г.Дзержинск Нижегородской обл.
Сообщений: 22,011
Записей в дневнике: 7
Сказал(а) спасибо: 230
Поблагодарили 201 раз(а) в 63 сообщениях
Репутация: 86437
По умолчанию

Цитата:
задача на рекуррентность
Может, на рекурсию?
Рекуррентность - это нечто другое.

Рекурсия всегда медленно работает если не принять специальных мер к сохранению стеков. Это пока для Вас рано, придётся подождать.
И какую программу Вам написать? Головную (main), которая состоит из 4 строк (2 accept, вызов функции и print)? Сами не справитесь?
Николай_С на форуме   Ответить с цитированием
Старый 06.10.2018, 20:02   #3 (permalink)
alexandor
Новичок
 
Регистрация: 06.10.2018
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Как раз и интересует сохранение стеков, ибо программа работает медленно с большими числами
alexandor вне форума   Ответить с цитированием
Старый 06.10.2018, 20:08   #4 (permalink)
Николай_С
Member
 
Аватар для Николай_С
 
Регистрация: 25.09.2012
Адрес: г.Дзержинск Нижегородской обл.
Сообщений: 22,011
Записей в дневнике: 7
Сказал(а) спасибо: 230
Поблагодарили 201 раз(а) в 63 сообщениях
Репутация: 86437
По умолчанию

А Вы способны это понять? Понятие "стек" Вам известно?
Что-нибудь знаете про распределение оперативной памяти? Про функции CALLOC, MALLOC что-нибудь слышали?
Николай_С на форуме   Ответить с цитированием
Старый 06.10.2018, 20:12   #5 (permalink)
alexandor
Новичок
 
Регистрация: 06.10.2018
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

calloc и malloc - да.
В любом случае, мне ничего не мешает хотя бы попытаться понять.
alexandor вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 06.10.2018, 20:15   #6 (permalink)
Николай_С
Member
 
Аватар для Николай_С
 
Регистрация: 25.09.2012
Адрес: г.Дзержинск Нижегородской обл.
Сообщений: 22,011
Записей в дневнике: 7
Сказал(а) спасибо: 230
Поблагодарили 201 раз(а) в 63 сообщениях
Репутация: 86437
По умолчанию

Пытайтесь.
Для начала, почитайте про распределение памяти внутри процессора (регистры), потом распределение памяти внутри программы (область кода, область данных). Вопросы отпадут сами собой.
Цитата:
Сообщение от alexandor Посмотреть сообщение
calloc и malloc - да.
И для чего они служат? Как применяются?
Николай_С на форуме   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Метки
задача, массив, помощь, рекурсия

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 21:03.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.