递归函数myPower的定义有逻辑错误,改成:
double myPower(int a,int b)
{
if(0==b) return 1;
return a*myPower(a,b-1);
}
如果改成这样,会更高效:
double myPower(int a,int b)
{
if(0==b) return 1;
if(1==b) return a;
return myPower(a,b%2)*myPower(a*a,b/2);
}
例子1
#include <stdio.h>
double myPower(int a,int b)
{
if(0==b) return 1;
return a*myPower(a,b-1);
}
int main()
{
int a=2,b;
for(b=0;b<11;b++)
printf("%lf\n",myPower(a,b));
return 0;
}
例子2
#include <stdio.h>
double myPower(int a,int b)
{
if(0==b) return 1;
if(1==b) return a;
return myPower(a,b%2)*myPower(a*a,b/2);
}
int main()
{
int a=3,b;
for(b=0;b<11;b++)
printf("%lf\n",myPower(a,b));
return 0;
}
暂作如下改进,不知是不是你想要的效果?
#include<stdio.h>
double myPower(int a,int b){
static double k=a;
k*=b;
if(b<=1) return k;
myPower(a,b-1);
}
int main(){
int x,n;
scanf("%d%d",&x,&n);
printf("%lf",myPower(x,n));
return 0;
}