给定实数a和正整数n,用分治法设计求
的快速算法
//递归算法
double exp2(double a,int n)
{
if(a==0)
return 0;
if(n<=0)
return 1;
else
{
int x=exp(a,n/2);
if(n%2) return a*x*x;
else return x*x;
}
}
非递归
0 | 1 | 0 | 1 | 1 | 1 | 0 | 1 |
a |
//非递归算法
double exp2(double a,int n)
{
int i;
double b, s=1.0;
i=n; b=a;
while(i>0)
{
if(i%2) s*=b;
i/=2;b*=b;
}
return s;
}