He estado probando expresiones constantes que se evalúan en tiempo de compilación. Pero jugué con un ejemplo que parece increíblemente rápido cuando se ejecuta en tiempo de compilación.
#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;
}
Cuando ejecuto este código, tarda unos 7 segundos en ejecutarse. Hasta aquí todo bien. Pero cuando me cambio long int res = fib(45)
a const long int res = fib(45)
ella no lleva ni un segundo. A mi entender, se evalúa en tiempo de compilación.
Pero la compilación tarda unos 0.3 segundos
¿Cómo puede el compilador evaluar esto tan rápido, pero en tiempo de ejecución lleva mucho más tiempo? Estoy usando gcc 5.4.0.
fib
. La implementación de los números de Fibonacci que tiene arriba es muy lenta. Intente almacenar en caché los valores de la función en el código de tiempo de ejecución y será mucho más rápido.