今度は template を使って フィボナッチ数列 を求めてみます。

Fibonacci 数列は

F0 = 1, F1 = 1
Fn+2 = Fn + Fn+1 (n≥0)

なので

#include <iostream>

template <int N>
struct Fibonacci
{
  enum { Result = Fibonacci<N-1>::Result + Fibonacci<N-2>::Result };
};

template <>
struct Fibonacci<0>
{
  enum { Result = 1 };
};
template <>
struct Fibonacci<1>
{
  enum { Result = 1 };
};

int main()
{
  std::cout << "f(1) = " << Fibonacci<1>::Result << "\n";
  std::cout << "f(2) = " << Fibonacci<2>::Result << "\n";
  std::cout << "f(3) = " << Fibonacci<3>::Result << "\n";
  std::cout << "f(4) = " << Fibonacci<4>::Result << "\n";
  std::cout << "f(5) = " << Fibonacci<5>::Result << "\n";
  std::cout << "f(6) = " << Fibonacci<6>::Result << "\n";
  std::cout << "f(7) = " << Fibonacci<7>::Result << "\n";
  std::cout << "f(8) = " << Fibonacci<8>::Result << "\n";
  std::cout << "f(9) = " << Fibonacci<9>::Result << "\n";
  std::cout << "f(10) = " << Fibonacci<10>::Result << "\n";
  
  std::cout << "f(27) = " << Fibonacci<27>::Result << "\n";

  std::cout << "f(32) = " << Fibonacci<32>::Result << "\n";

  return 0;
}

ぢゃん

やっぱりコンパイル時に計算は終了しているので、動作は高速です :p

まぁ、環境によって enum の値が早々にoverflowしてしまう場合があるので、あまり大きなnは渡せませんが。

トラックバック(0)

トラックバックURL: http://floralcompany.jp/mt/mt-tb.cgi/167

コメントする

AUTHOR

  • turugina (虎王 剱奈)
  • E-mail: turugina {at} floralcompany.jp
  • pixiv
  • ニジエ

2014年5月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.2.10

- 警 告 -

本サイトにはいわゆる「18禁画像」(イラスト)へのリンクが存在します。 未成年の方や、その手の画像に不快感を覚える方は、 該当記事(「えちぃの」及び「ちょっとえちぃの」カテゴリ) をご覧にならないようお願いいたします。

上記を理解した上で非表示のブログパーツを表示する
あわせて読みたいブログパーツ
ついった
drawr/pixiv/twitpic