用c++泛型编程实现斐波那契数列
时间: 2023-08-18 15:08:35 浏览: 105
可以使用递归或循环来实现斐波那契数列,以下是一个使用模板的循环实现:
```cpp
template<typename T>
T fibonacci(T n) {
if (n <= 1) {
return n;
}
T a = 0, b = 1, c;
for (T i = 2; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
return b;
}
```
这个函数使用模板来支持不同类型的计算,而且使用一个循环来避免使用递归时可能出现的堆栈溢出问题。可以像这样调用:
```cpp
int main() {
std::cout << fibonacci<int>(10) << std::endl; // 输出 55
std::cout << fibonacci<unsigned long long>(50) << std::endl; // 输出 20365011074
return 0;
}
```
相关问题
泛型编程和元编程区别,并各举例子
泛型编程和元编程都是C++中的高级编程技术,但它们的目的和应用场景不同。
泛型编程是一种编写通用代码的技术,即编写不依赖于特定数据类型的代码。通过使用泛型,可以编写一次代码,然后在不同的数据类型上重复使用该代码。C++中的模板就是一种实现泛型编程的技术。例如,下面的代码使用了C++中的模板编写了一个通用的函数来比较两个数的大小:
```c++
template<typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
```
这个函数可以用于比较任何类型的数,包括整数、浮点数、字符等等。
元编程则是一种在编译期间生成代码的技术。元编程可以通过模板元编程技术来实现。使用元编程,可以编写代码来生成其他代码,例如在编译期间进行计算、类型推断、代码优化等。C++中的模板元编程技术允许开发者在编译期间使用模板来产生代码。例如,下面的代码使用C++中的模板元编程技术来计算斐波那契数列:
```c++
template<int n>
struct Fibonacci {
static const int value = Fibonacci<n-1>::value + Fibonacci<n-2>::value;
};
template<>
struct Fibonacci<0> {
static const int value = 0;
};
template<>
struct Fibonacci<1> {
static const int value = 1;
};
int main() {
std::cout << Fibonacci<10>::value << std::endl; // 输出55
return 0;
}
```
这个代码使用了模板元编程技术来计算斐波那契数列的第n项,然后在编译期间产生了对应的代码。
阅读全文