x→x^2→x^4→x^9→x^19→x^38→x^77
根据递归计算的结果,如果 n 为偶数,那么 xn=y2x^n = y^2xn=y2;如果 n为奇数,那么 xn=y2×xx^n = y^2 \times xxn=y2×x;
递归的边界为 n=0,任意数的 0次方均为 1。
#include <iostream>
using namespace std;
double quickPow(double x, long long n)
{
if (n == 0)
return 1.0;
double y = quickPow(x, n / 2); //分治
return n % 2 == 0 ? y * y : y * y * x; //判断奇偶
}
double myPow(double x, int n)
{
long long N = n;
return (n > 0) ? quickPow(x, N) : 1.0 / quickPow(x, -N); //判断幂正数还是负数
}
int main(int argc, char const *argv[])
{
int n;
double x;
cout << "请输入底数和指数:";
cin >> x >> n;
cout << myPow(x, n);
return 0;
}