Код: Выделить всё
constexpr auto fibo(unsigned int number) -> unsigned long long {
if (number < 2) return number;
return fibo(number - 1) + fibo(number - 2);
}
< /code>
Если я сравниваю его с кодом ниже, я получаю следующий вывод: < /p>
benchmark name samples iterations est run time
mean low mean high mean
std dev low std dev high std dev
-------------------------------------------------------------------------------
Benchmark fibo(46) 100 1 2.66 m
1.60356 s 1.60231 s 1.60477 s
6.30399 ms 5.51902 ms 7.32077 ms
Код: Выделить всё
benchmark name samples iterations est run time
mean low mean high mean
std dev low std dev high std dev
-------------------------------------------------------------------------------
Benchmark fibo(46) 100 1 17.7672 ms
177.013 us 176.272 us 177.9 us
4.13731 us 3.56318 us 4.80496 us
< /code>
Почему при передаче параметра на справочнике такое гигантское увеличение скорости?#include "Fibonacci.hpp"
#include "catch2/catch_message.hpp"
#include
#include
#include
#include
#include
#include
#include
TEST_CASE("Fibonacci calculation", "[Fibonacci Benchmark Suite]") {
auto entry = GENERATE(table({
{0, 0},
{1, 1},
{2, 1},
{3, 2},
{4, 3},
{5, 5},
{46, 1836311903} // Runs long!
}));
auto input = std::get(entry);
auto expected = std::get(entry);
std::ostringstream oss;
oss
Подробнее здесь: [url]https://stackoverflow.com/questions/79583153/why-is-a-recursive-constexpr-function-so-much-faster-with-reference-parameters-t[/url]