首页 > 代码库 > 用模板元实现50个台阶问题,一次走一步或者两步或者3步,用模板元实现求裴波那契额数列
用模板元实现50个台阶问题,一次走一步或者两步或者3步,用模板元实现求裴波那契额数列
1.用模板元实现50个台阶问题,一次走一步或者两步或者3步
2.分析
由上面分析可以知道,到达N(N > 3)级台阶时的次数为:目标台阶的前3个台阶分别直接到目标台阶的次数总和。
3.模板元把在运行时消耗的时间,在编译器键优化。
4.通过模板元实现的代码如下:
#include <iostream> /*这里是int 类型的,N表示台阶数量*/ template<int N> struct data { enum { res = data<N - 1>::res + data<N - 2>::res + data<N - 3>::res }; }; template<> struct data<1> { enum { res = 1 }; }; template<> struct data<2> { enum { res = 2 }; }; template<> struct data<3> { enum { res = 4 }; }; void main() { const int myint = 4; int num = data<myint>::res; //<>内部不可以有变量 std::cout << num << std::endl; std::cin.get(); }
运行结果为:7
2.用模板元实现求裴波那契额数列
/*用模板元实现求裴波那契额数列,1,1,2,3,5,....,求其中F(n)=F(n-1)+F(n+2)*/ #include <iostream> /*这里是int 类型的,N表示台阶数量*/ template<int N> struct data { enum { res = data<N - 1>::res + data<N - 2>::res}; }; template<> struct data<1> { enum { res = 1 }; }; template<> struct data<2> { enum { res = 1 }; }; void main() { const int myint = 5; int num = data<myint>::res; //<>内部不可以有变量 std::cout << num << std::endl; std::cin.get(); } 运行的结果是:5
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。