1. 题目描述(LeetCode50)
Implement pow(x, n).
Hide Tags :Binary Search ,Math
2. 解决思路
我的解题方法主要是利用递归和二分,具体就是把x的n次方划分成两个x的n/2次方相乘,然后递归求解子问题,结束条件是n为0返回1。因为是对n进行二分,所以算法复杂度是O(logn)。
3. 完整代码
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
double power(double x, int n);
int main()
{
double x = 1.0;
int n = 0;
printf("请输入底数x的值:\n");
cin >> x;
printf("请输入幂数n的值:\n");
cin >> n;
cout << "x=" << x << endl;
cout << "n=" << n << endl;
double result = power(x, n);
printf("power(%f,%d)=%f\n" , x,n,result);
getchar();
return 0;
}
double power(double x, int n)
{
if (n == 0)
return 1.0;
if (n<0)
return 1.0 / power(x, -n);
double half = power(x, n / 2);
if (n % 2 == 0)
return half*half;
else
return half*half*x;
}