сигма-функция с любым входом функции - PullRequest
1 голос
/ 26 апреля 2020

Я делал различные функции, которые будут вычислять сигмы в диапазоне очень специфических c функций. Сейчас я пытаюсь написать сигма-функцию, чтобы вы вводили лямбду или функцию, а затем она вычисляла бы сумму своих выходных данных в пределах диапазона. У меня итерационный код выполнен отлично, но теперь нужно выяснить, как вводить лямбду и вызывать ее внутри этой функции. вот мой текущий код:

int sigma(int start, int end, ? function) {
    if (start == end) {
        return function(start);
    }
    else {
        return function(start) + sigma(start + 1, end, function);
    }
}

PS, если кто-нибудь может мне помочь сделать это не использовать рекурсию, что было бы удивительно

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Вы можете превратить эту функцию в шаблон-функцию:

template<typename Fn>
int sigma(int start, int end, Fn function) {
 // ...
}

, а затем вызвать ее с помощью лямбды:

auto lam = [](int) { return 42; };

std::cout << sigma(1, 5, lam);

Чтобы избежать рекурсии, тело может быть просто :

int sum = 0;
for (int i = start; i <= end; ++i)
  sum += function(i);

return sum;
0 голосов
/ 26 апреля 2020

Вам нужен тип для вашего параметра. Так спросите себя, каким должен быть этот параметр? Основываясь на вашем определении sigma(), вы, похоже, ожидаете функционально подобный объект, который вызывается с параметром int и возвращает int. То есть std::function<int(int)>. Объявление вашей функции может в итоге выглядеть следующим образом:

int sigma(int start, int end, std::function<int(int)> & function);

Если вы хотите обрабатывать функции с другими сигнатурами, тогда шаблон функции может быть более подходящим. См. std :: function vs template для обсуждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...