История изменений
Исправление
wota,
(текущая версия)
:
C++11:
~$ cat 1.cpp
#include <stdio.h>
class Fib
{
int _value;
public:
constexpr Fib(int n) : _value( n ) {}
constexpr int value() const
{
return _value <= 2 ?
1 :
Fib(_value - 1).value() + Fib(_value - 2).value();
}
};
int main()
{
for(int i=0; i<10; i++)
{
constexpr int value = Fib(40).value();
printf("n=%d\n", value);
}
}
~$ g++ -std=c++11 -Ofast 1.cpp
~$ time ./a.out
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
real 0m0.001s
user 0m0.000s
sys 0m0.001s
ну и даже те варианты, что есть, стоит пересобрать с -Ofast, а не -O3
Исходная версия
wota,
:
C++11:
~$ cat 1.cpp
#include <stdio.h>
class Fib
{
int _value;
public:
constexpr Fib(int n) : _value( n ) {}
constexpr int value() const
{
return _value <= 2 ?
1 :
Fib(_value - 1).value() + Fib(_value - 2).value();
}
};
int main()
{
for(int i=0; i<10; i++)
{
constexpr Fib x(40);
constexpr int value = x.value();
printf("n=%d\n", value);
}
}
~$ g++ -std=c++11 -Ofast 1.cpp
~$ time ./a.out
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
real 0m0.001s
user 0m0.000s
sys 0m0.001s
ну и даже те варианты, что есть, стоит пересобрать с -Ofast, а не -O3