• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задача на рекуррентность

alexandor

Ученик
Регистрация
6 Окт 2018
Сообщения
3
Реакции
0
Баллы
0
Задача на рекуррентность

Помогите, пожалуйста с программой на С.
Во вложении описана данная функция. Нужно написать программу, которая принимает два аргумента и выводит значение функции.проблема в том, что программа работает медленно, и у меня проблема с пониманием как правильно использовать мемоизацию. то есть если значение не было посчитано раннее, нужно вычислять. На вводе программа будет запрашивать два числа ( 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.webp
    Screenshot_6.webp
    3.6 KB · Просмотры: 56
  • Screenshot_1.webp
    Screenshot_1.webp
    7.9 KB · Просмотры: 62
  • Screenshot_2.webp
    Screenshot_2.webp
    8.1 KB · Просмотры: 56
задача на рекуррентность
Может, на рекурсию?
Рекуррентность - это нечто другое. ;)

Рекурсия всегда медленно работает если не принять специальных мер к сохранению стеков. Это пока для Вас рано, придётся подождать.
И какую программу Вам написать? Головную (main), которая состоит из 4 строк (2 accept, вызов функции и print)? Сами не справитесь?
 
Как раз и интересует сохранение стеков, ибо программа работает медленно с большими числами
 
А Вы способны это понять? Понятие "стек" Вам известно?
Что-нибудь знаете про распределение оперативной памяти? Про функции CALLOC, MALLOC что-нибудь слышали?
 
calloc и malloc - да.
В любом случае, мне ничего не мешает хотя бы попытаться понять.
 
Пытайтесь.
Для начала, почитайте про распределение памяти внутри процессора (регистры), потом распределение памяти внутри программы (область кода, область данных). Вопросы отпадут сами собой.
И для чего они служат? Как применяются?
 
Назад
Сверху