Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

フィボナッチ数列でメモ化

スポンサードリンク

f:id:fa11enprince:20190413175245j:plain なんとなくC++をちょろっと書いてみたくなったので書いてみました。
いや、ほぼC言語だけど…。 それよりもWandboxがC++2aとかになってて…えぇ…C++11からかなりバージョン上がってるなぁ…という印象です。

#include <iostream>
#include <cstdlib>
#include <stdexcept>

#define CHECK(e) do { if (e < 0) { throw std::out_of_range("the number must be grater than or equal to 1"); } } while(0)

int x[] = {0, 1};  // fib(0) = 0, fib(1) = 1

/**
 * memoized fibonacci function
 */
int fib_memo(int e) {
    CHECK(e); 
    int ans = 0;
    for (int i = 0; i < e; ++i) {
        ans = x[i%2] + x[(i+1)%2];
        x[(i+1)%2] = ans;  // first, update 2nd index ...
    }
    return ans;
}

/**
 * recursive fibonacci function
 */
int fib_recv(int e) {
    CHECK(e);
    return e == 0 ? 0 : (e == 1 ? 1 : (fib_recv(e - 1) + fib_recv(e - 2)));
}

int main()
{
    using namespace std;
    ios::sync_with_stdio(false);
    try {
       cout << fib_memo(45) << endl;
       //cout << fib_recv(45) << endl;
    } catch (const out_of_range& e) {
       cerr << e.what() << endl;
    }
}

[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ

cpprefjpをのぞいたらC++11以降の記載がたくさん。。。 なんか見た目が結構変わった気がする…。