Я випробував вирази const, які оцінюються під час компіляції. Але я грав із прикладом, який здається неймовірно швидким, коли виконується під час компіляції.
#include<iostream>
constexpr long int fib(int n) {
return (n <= 1)? n : fib(n-1) + fib(n-2);
}
int main () {
long int res = fib(45);
std::cout << res;
return 0;
}
Коли я запускаю цей код, для запуску потрібно близько 7 секунд. Все йде нормально. Але коли я переходжу long int res = fib(45)
на const long int res = fib(45)
це, потрібно навіть секунди. Наскільки я розумію, це оцінюється під час компіляції.
Але компіляція займає приблизно 0,3 секунди
Як компілятор може оцінити це так швидко, але під час виконання це потребує набагато більше часу? Я використовую gcc 5.4.0.
fib
. Реалізація цифр, які ви маєте вище, є попередньою. Спробуйте кешувати значення функції в коді виконання, і це буде набагато швидше.