这个代码为什么指数不能输入负数和小数,怎样改

#include
using namespace std;
double power(double a,int n)
{
if (n==1)return a;
else return a*=power(a,n-1);
}

int main()
{
double a,w;
int n;
cout<<"请输入实数a和正整数n:"< cin>>a>>n;
double i=power(a,n);
cout<<"n次方后:"<<"w="<<i<<endl;
cout<<"n="<<n<<endl;
system("pause");

}

首先,小数肯定不行,你定义的n是整型变量。n是负数的话,没有限定条件,无限递归了,所以也是不行的。另外,没有考虑n=0的情况

这是用递归法求解数的整数幂,理解算法原理就很容易想明白为什么指数不能是小数了。
指数是负数是可以的,只需要对上述代码做少量修改。因为指数是负数时可以先求指数为对应的绝对值时的值,再求倒数。例如x的-2次方可以先计算x的2次方,然后求其倒数

另外,解决这个问题更好的算法是分治法,你可以百度一下

你的代码中else return a*=power(a,n-1);这一句很奇怪,因为你return的是一个赋值语句的值(我不知道这个赋值语句会返回什么),最好改成
else return a*power(a,n-1);

将power改为pow,加math.h头文件,可以输入负数。lz可以试一下