LINUX.ORG.RU

История изменений

Исправление 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