用c实现分治法求a的n次方
时间: 2023-09-26 16:11:07 浏览: 135
以下是使用分治算法和递归来计算 a 的 n 次方的 C 代码:
```c
#include<stdio.h>
//定义函数power
int power(int a, int n){
if(n==0) return 1; //当n=0时,返回1
if(n==1) return a; //当n=1时,返回a
int t = power(a, n/2); //递归计算a的n/2次方
if(n%2 == 0) return t*t; //如果n是偶数,返回t的平方
else return t*t*a; //如果n是奇数,返回t的平方乘以a
}
int main(){
int a = 2, n = 10; //测试数据
int result = power(a, n); //调用power函数计算a的n次方
printf("%d的%d次方为%d\n", a, n, result); //输出结果
return 0;
}
```
在这个代码中,我们定义了一个名为 `power` 的函数来计算 a 的 n 次方。在函数中,我们首先考虑特殊情况,即当 n 为 0 或 1 时分别返回 1 和 a。对于其他情况,我们使用递归来计算 a 的 n/2 次方,并将结果存储在变量 t 中。最后,我们根据 n 的奇偶性来计算 a 的 n 次方并返回结果。
在主函数中,我们定义了 a 和 n 的值,并调用 `power` 函数来计算 a 的 n 次方。最后,我们输出结果。
这个算法的时间复杂度为 O(log n),因为每次递归都将问题的规模减少了一半,所以需要进行 O(log n) 次递归调用。
阅读全文