閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

フィボナッチ数を求めるプログラム

C++版。g++ 4.0.1でコンパイル。

再帰

#include <iostream>
using namespace std;

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

template<>
struct fib<1>
{
  enum { Value = 1 };
};
template<>
struct fib<0>
{
  enum { Value = 0 };
};

int main()
{
  cout << fib<50>::Value << endl;
  return 0;
}

反復?

#include <iostream>
using namespace std;

template<long long a, long long b, int N>
struct fib_iter
{
  enum { Value = fib_iter<a+b, a, N-1>::Value };
};
template<long long a, long long b>
struct fib_iter<a, b, 0>
{
  enum { Value = b };
};
template<int N>
struct fib
{
  enum { Value = fib_iter<1, 0, N>::Value };
};

int main()
{
  cout << fib<50>::Value << endl;
  return 0;
}