Задача на рекуррентность
Вложений: 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]; } |
Цитата:
Рекуррентность - это нечто другое. ;) Рекурсия всегда медленно работает если не принять специальных мер к сохранению стеков. Это пока для Вас рано, придётся подождать. И какую программу Вам написать? Головную (main), которая состоит из 4 строк (2 accept, вызов функции и print)? Сами не справитесь? |
Как раз и интересует сохранение стеков, ибо программа работает медленно с большими числами
|
А Вы способны это понять? Понятие "стек" Вам известно?
Что-нибудь знаете про распределение оперативной памяти? Про функции CALLOC, MALLOC что-нибудь слышали? |
calloc и malloc - да.
В любом случае, мне ничего не мешает хотя бы попытаться понять. |
Пытайтесь.
Для начала, почитайте про распределение памяти внутри процессора (регистры), потом распределение памяти внутри программы (область кода, область данных). Вопросы отпадут сами собой. Цитата:
|
Часовой пояс GMT +4, время: 23:02. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.