Я пробовал константные выражения, которые оцениваются во время компиляции. Но я играл с примером, который кажется невероятно быстрым при исполнении во время компиляции.
#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
. Реализация чисел Фибоначчи, которые у вас есть выше, идет медленно. Попробуйте кэшировать значения функций в коде времени выполнения, и это будет намного быстрее.