Технический форум

Технический форум (http://www.tehnari.ru/)
-   C/C++/С# (http://www.tehnari.ru/f42/)
-   -   Задача на рекуррентность (http://www.tehnari.ru/f42/t261284/)

alexandor 06.10.2018 19:11

Задача на рекуррентность
 
Вложений: 3
Помогите, пожалуйста с программой на С.
Во вложении описана данная функция. Нужно написать программу, которая принимает два аргумента и выводит значение функции.проблема в том, что программа работает медленно, и у меня проблема с пониманием как правильно использовать мемоизацию. то есть если значение не было посчитано раннее, нужно вычислять. На вводе программа будет запрашивать два числа ( 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];

}

Николай_С 06.10.2018 19:55

Цитата:

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

Рекурсия всегда медленно работает если не принять специальных мер к сохранению стеков. Это пока для Вас рано, придётся подождать.
И какую программу Вам написать? Головную (main), которая состоит из 4 строк (2 accept, вызов функции и print)? Сами не справитесь?

alexandor 06.10.2018 20:02

Как раз и интересует сохранение стеков, ибо программа работает медленно с большими числами

Николай_С 06.10.2018 20:08

А Вы способны это понять? Понятие "стек" Вам известно?
Что-нибудь знаете про распределение оперативной памяти? Про функции CALLOC, MALLOC что-нибудь слышали?

alexandor 06.10.2018 20:12

calloc и malloc - да.
В любом случае, мне ничего не мешает хотя бы попытаться понять.

Николай_С 06.10.2018 20:15

Пытайтесь.
Для начала, почитайте про распределение памяти внутри процессора (регистры), потом распределение памяти внутри программы (область кода, область данных). Вопросы отпадут сами собой.
Цитата:

Сообщение от alexandor (Сообщение 2602989)
calloc и malloc - да.

И для чего они служат? Как применяются?


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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.