第一个自己写的代码:
#include<iostream>
using namespace std;
template<double n>
struct fbonacci {
enum {RET=fbonacci<n-1>::RET+fbonacci<n-2>::RET};
};
template<>
struct fbonacci<0>
{
enum {RET=0.0};
};
template<>
struct fbonacci<1> {
enum {RET=1.0};
};
int main() {
cout << fbonacci<500>::RET << endl;
system("pause");
return 0;
}
自己改进的代码,没有问题:
// C++ Program to find n'th fibonacci Number
#include<iostream>
#include<cmath>
int fib(int n) {
double phi = (1 + sqrt(5)) / 2;
return round(pow(phi, n) / sqrt(5));
}
// Driver Code
int main ()
{
int n = 9;
std::cout << fib(n) << std::endl;
return 0;
}
//This code is contributed by Lokesh Mohanty.
#include<iostream>
using namespace std;
template <int n>
struct fbonacci {
static constexpr const double RET=fbonacci<n-1>::RET+fbonacci<n-2>::RET;
};
template<>
struct fbonacci<0>
{
static constexpr const double RET=0;
};
template<>
struct fbonacci<1> {
static constexpr const double RET=1;
};
int main() {
cout << fbonacci<500>::RET << endl;
system("pause");
return 0;
}
这篇文章对cpp模板编程讲解的很深刻。上面的答案也是按照里面的一个参考文献来写的。
cpp模板编程