如果直接重复相乘的方法需要n次乘法,如果利用递归的方法分解子问题,只要log2n的复杂度。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int count = 0;
unsigned long long power1(int x, int n) {
unsigned long long ret = 0;
if(n == 1) {
return x;
}
ret = power1(x, n/2);
ret = ret*ret;
count++;
if(n % 2 == 1) {
ret = ret*x;
count++;
}
return ret;
}
int main(int argc, char** argv) {
int x = atoi(argv[1]);
int n = atoi(argv[2]);
printf("%lld \n", power1(x, n));
printf("count %d\n", count);
return 0;
}