double power_negative(double n,int p)
蚌埠网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。创新互联建站于2013年创立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站。
{
double pow = 1;
int q;
q=-p;
if(q0)
pow = power_negative(n,1-q) / n;
return pow;
}
改成这样,虽然你那个写的是递归调用,但是返回的却是1/pow,那么就会是0.5 * 2 * 0.5 * 2 * 0.5这样的形式返回,所以最终无论是多少,结果都是0.5,而且递归时应该用1-q,因为你调用负数求幂,必须使参数为负才会正确
long
double
_pow_i(
long
double
_X,
int
_Y
)
{
if
(
!_Y
)
return
1;
//
次幂为0的情况
if
(
!(_Y-1)
)
return
_X;
//
当_Y
=
1的情况则返回结果_X
return
_X
*
_pow_i(
_X,
abs(_Y)-1
);
//
每一步返回
_X
*
上一次的乘积,_Y
减1计数
}
long
double
_pow(
long
double
_X,
int
_Y
)
{
long
double
_Z
=
_pow_i(
_X,
_Y
);
return
_Y
?
1
/
_Z
:
_Z;
}
因为写在一起的话不好解释,所以分开正负的情况,_pow就是判断次幂是否为负数,是负数就等于1/那个数个正次幂。
#includestdio.h
double power(double x,int n)
{if(n==0)return 1.0;
else if(n0)return x*power(x,n-1);
else return power(x,n+1)/x;
}
int main()
{double x;
int n;
scanf("%lf%d",x,n);
printf("%lf\n",power(x,n));
return 0;
}
#includestdio.h
double power_positive(double n,int p);
double power_negative(double n,int p);
int main(void)
{
double x,xpow;
int exp;
printf("Enter a number and the integer power to which\n");
printf("the number will be raised.Enter q to quit.\n");
while (scanf("%lf %d",x,exp)==2)
{
if (x==0)
printf("%lf to the power of %d is 0.\n",x,exp);
else
{
if (exp==0)
printf("%lf to the power of %d is 1.\n",x,exp);
else if (exp0)
{
xpow=power_positive(x,exp);
printf("%lf to the power of %d is %lf.\n",x,exp,xpow);
}
else
{
xpow=power_negative(x,exp);
printf("%lf to the power of %d is %lf.\n",x,exp,xpow);
}
}
printf("Enter next pair of numbers or q to quit.\n");
}
printf("Hope you enjoyed this power trip --BYE!\n");
return 0;
}
double power_positive(double n,int p)
{
double pow=1;
if (p0)
pow=n*power_positive(n,(p-1));
return pow;
}
double power_negative(double n,int p) //用递归实现
{
if (p==-1)return 1/n;
else
return (1/n)*power_negative(n,p+1);
}