请编写递归函数,求下面的简单幂级数。
P(x,n)=1+x+x2+x3+...+xn
函数原型
double P(double x, int n);
说明:x 为实数,n 为非负整数,函数值为多项式的值。
规定:当 n=0 时,函数值为 1。
裁判程序
#include <stdio.h>
double P(double x, int n);
int main()
{
double x;
int n;
scanf("%lg%d", &x, &n);
printf("%.15g\n", P(x, n));
return 0;
}
/* 你提交的代码将被嵌在这里 */
输入样例1
0.5 12
输出样例1
1.999755859375
输入样例2
-0.5 12
输出样例2
0.666748046875
两种都可行!
double P(double x, int n)
{
int i;
double s=1.0;
if(n==0)
{
s = 1.0;
}
else if(n>0)
{
for(i=1;i<=n;i++)
{
s = (s * x) + 1;
}
}
return s;
}
double Power(double x, int n)//求x的n次幂函数
{
double sum=1.0;//定义一个sum来保存每次循环的结果
if(x==0)//这里当然可以删掉两种情况,直接return 0;由于另一个题目需要,这里我就不删了!
{
if(n<0)
{
printf("不正确的参数!\n");
return 0;
}
else
return 0;
}
else //x!=0时,要分三种情况,需要注意的是为了计算方便,在n<0时令n=-n.
{
if(n>0)
{
for(int i=1;i<=n;i++)
{
sum=sum*x;//累乘
}
return sum;
}
else if(n==0)
return 1;
else if(n<0)
{
n =-n;//上面有提到
for(int i=1;i<=n;i++)
{
sum=sum*x;
}
return 1/sum;
}
}
}
double P(double x, int n)
{
if(x==0)
return 1;
else
{
double s=0;
for(int i=0;i<=n;i++)
{
s=s+Power(x,i);//使用上面的函数,进行累加。
}
return s;
}
}