用函数模板求x的n次方
时间: 2023-06-11 10:06:03 浏览: 75
下面是一个用函数模板求x的n次方的示例代码:
```c++
#include <iostream>
template <typename T>
T power(T x, int n) {
T result = 1;
while(n > 0) {
if(n % 2 == 1) {
result *= x;
}
x *= x;
n /= 2;
}
return result;
}
int main() {
std::cout << power(2, 3) << std::endl; // 输出8
std::cout << power(3.14, 2) << std::endl; // 输出9.8596
return 0;
}
```
这个函数模板接受两个参数:一个是类型为T的数x,另一个是int类型的n。它返回x的n次方。
函数模板的实现使用了二进制快速幂算法,这个算法可以将幂运算的时间复杂度从O(n)降低到O(log n)。
相关问题
用递归函数求x的n次方
下面是一个递归函数求x的n次方的示例代码:
```
double power(double x, int n) {
if (n == 0) {
return 1.0;
}
double half = power(x, n / 2);
if (n % 2 == 0) {
return half * half;
} else if (n > 0) {
return half * half * x;
} else {
return half * half / x;
}
}
```
该函数首先判断n是否为0,如果是则返回1.0,因为任何数的0次方都等于1。如果n不是0,则递归计算x的n/2次方,并将结果存储在变量half中。如果n是偶数,则直接返回half的平方;否则,如果n为正数,则返回half的平方再乘以x,否则返回half的平方再除以x。这样,递归过程会将n不断减半,直到n为0,从而结束递归。
使用递归函数求x的n次方
可以使用如下递归函数求x的n次方:
```python
def power(x, n):
if n == 0:
return 1
elif n % 2 == 0:
return power(x**2, n//2)
else:
return x * power(x**2, (n-1)//2)
```
这个函数的思路是:
- 如果n等于0,返回1(任何数的0次方都是1)。
- 如果n是偶数,返回x的n/2次方的平方。
- 如果n是奇数,返回x乘以x的(n-1)/2次方的平方。
这个递归函数的时间复杂度是O(log n),因为每次递归都将指数减半。