/**
* 实验题目:
* 高效求解x^n
* 实验目的:
* 掌握基本递归算法设计
* 实验内容:
* 要求最多使用O(以2为底n的对数)次递归调用
*/
#include <stdio.h>
/*-------------------------高效求解x^n---------------------------*/
/**
* 算法思路
* 设f(x,n) = x ^ n,f(x,n/2) = x ^ (n/2),对应的递归模型:
* 1、当n为1时,f(x,n) = x
* 2、当n为大于1的偶数时,f(x,n) = x ^ (n/2) x x ^ (n/2) = f(x,n/2) x f(x,n/2)
* 3、当n为大于1的奇数时,f(x,n) = x x x ^ ((n-1)/2) x x ^ ((n-1)/2) = x x f(x,(n-1)/2) x f(x,(n-1)/2)
*/
static double expx(double x, int n)
{
if(n == 1)
return x;
else if(n % 2 == 0) // 当n为大于1的偶数时
return expx(x, n/2) * expx(x, n/2);
else // 当n为大于1的奇数时
return x * expx(x, (n - 1)/2) * expx(x, (n - 1)/2);
}
int main(void)
{
double x;
int n;
printf("x:");
scanf("%lf", &x);
printf("n:");
scanf("%d", &n);
printf("%g的%d次方:%g\n", x, n, expx(x, n));
return 0;
}
测试结果:
x:2
n:10
2的10次方:1024