使用模板元编程快速的得到斐波那契数。。

简介:

这是一种将运行时消耗转移到编译器消耗的方法,是c++模板的一种应用。

当你的程序运行时效率需要特别高的时候,可以考虑这样的方法。

模板实例化的时候需要常量:

#include <iostream>
using namespace std;
template < unsigned N >
struct Fib
{
   enum
   {
      Val = Fib<N-1>::Val + Fib<N-2>::Val //递归。。
   };
};
template<>    //针对和的特化作为结束的条件
struct Fib<0>
{
   enum
   {
      Val = 0
   };
};
template<>
struct Fib<1>
{
   enum
   {
      Val = 1
   };
};
int main()
{
   cout<<Fib<20>::Val <<endl;
   return 0;
}

如果你觉得Fib<20>::Val这样的调用很麻烦的话可以定义一个类似的宏使得其应用有类似于函数调用的形式:

#define FibFuc( n ) (Fib<n>::Val)


==============================================================================
本文转自被遗忘的博客园博客,原文链接:http://www.cnblogs.com/rollenholt/archive/2012/04/02/2429818.html,如需转载请自行联系原作者
相关文章
|
1月前
|
存储 算法 Java
用Java实现阶乘
用Java实现阶乘
30 0
|
1月前
|
C语言
C语言递归问题【青蛙跳台阶】和【汉诺塔】
C语言递归问题【青蛙跳台阶】和【汉诺塔】
|
2月前
|
算法 搜索推荐 程序员
C语言第三十一练——递归求解n位斐波那契数列
C语言第三十一练——递归求解n位斐波那契数列
20 0
|
3月前
|
算法 C语言
C语言汉诺塔数列(循环版,递归版)
C语言汉诺塔数列(循环版,递归版)
36 0
|
8月前
|
编译器
初阶函数递归经典例题(1)
初阶函数递归经典例题(1)
|
9月前
|
算法 C语言
【C语言】带你玩转递归,迭代算法2
【C语言】带你玩转递归,迭代算法
65 0
|
10月前
|
C语言
【C语言】函数和递归的基础题目
【C语言】函数和递归的基础题目
|
10月前
|
C语言
C语言解决青蛙跳台阶问题(递归与非递归)
一只青蛙可以一次跳1级台阶或一次跳2级台阶,例如:跳上第一级台阶只有一种跳法:直接跳1级即可。跳上两级台阶,有两种跳法:每次跳1级,跳两次;或者一次跳2级.问要跳上第级台阶有多少种跳法?
106 0
|
11月前
|
Serverless Python
一日一技:如何用递归函数写出2**n - 1?
一日一技:如何用递归函数写出2**n - 1?
65 0
05【C语言 & 趣味算法】经典:兔子产子问题(即:Fibonacci数列)
05【C语言 & 趣味算法】经典:兔子产子问题(即:Fibonacci数列)
05【C语言 & 趣味算法】经典:兔子产子问题(即:Fibonacci数列)