您的位置:首页 > 编程语言 > C语言/C++

C++模板编程:如何在编译器确定斐波那契数列?

2010-07-03 17:54 369 查看
使用模板元技术:

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


我们可以看到,上面实际上运用到了递归,递归总要有一个结束的时候,因此我们需要为它写两个特化版本:



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

template<>
struct Fibonacci<1>
{
	enum
	{
		result = 1
	};
};


这样,我们就可以在编译器确定斐波那契数列的具体值了,下面是一个测试程序:

int _tmain(int argc, _TCHAR* argv[])
{
	printf("%d    ", (int)(Fibonacci<0>::result));
	printf("%d    ", (int)(Fibonacci<1>::result));
	printf("%d    ", (int)(Fibonacci<2>::result));
	printf("%d    ", (int)(Fibonacci<3>::result));
	printf("%d    ", (int)(Fibonacci<4>::result));
	printf("%d/n", (int)(Fibonacci<5>::result));
	return 0;
}


输出结果是:

1 1 2 3 5 8
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: