Eu tenho experimentado expressões const que são avaliadas em tempo de compilação. Mas eu brinquei com um exemplo que parece incrivelmente rápido quando executado em tempo de compilação.
#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;
}
Quando executo esse código, leva cerca de 7 segundos para executar. Por enquanto, tudo bem. Mas quando eu mudar long int res = fib(45)
para const long int res = fib(45)
não leva nem um segundo. No meu entender, é avaliado em tempo de compilação.
Mas a compilação leva cerca de 0,3 segundos
Como o compilador pode avaliar isso tão rapidamente, mas em tempo de execução, leva muito mais tempo? Estou usando o gcc 5.4.0.
fib
. A implementação dos números de fibonacci que você possui acima é muito lenta. Tente armazenar em cache os valores da função no código de tempo de execução e será muito mais rápido.