constexpr pregunta, ¿por qué estos dos programas diferentes se ejecutan en una cantidad de tiempo tan diferente con g ++?
Estoy usando gcc 4.6.1 y obtengo un comportamiento interesante que implica llamar a unconstexpr
función. Este programa funciona bien y de inmediato imprime12200160415121876738
.
#include <iostream>
extern const unsigned long joe;
constexpr unsigned long fib(unsigned long int x)
{
return (x <= 1) ? 1 : (fib(x - 1) + fib(x - 2));
}
const unsigned long joe = fib(92);
int main()
{
::std::cout << "Here I am!\n";
::std::cout << joe << '\n';
return 0;
}
Este programa tarda una eternidad en ejecutarse y nunca tuve la paciencia para esperar a que imprima un valor:
#include <iostream>
constexpr unsigned long fib(unsigned long int x)
{
return (x <= 1) ? 1 : (fib(x - 1) + fib(x - 2));
}
int main()
{
::std::cout << "Here I am!\n";
::std::cout << fib(92) << '\n';
return 0;
}
¿Por qué hay una diferencia tan grande? ¿Estoy haciendo algo mal en el segundo programa?
Editar Estoy compilando esto cong++ -std=c++0x -O3
en una plataforma de 64 bits.