なんとなく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; } }
cpprefjpをのぞいたらC++11以降の記載がたくさん。。。 なんか見た目が結構変わった気がする…。