方法1:直接模拟累加。
题目条件:n为最高的次数,a数组为系数,x为给定的值。
double f(int n,double a[],double x)
{
int i;
double p=a[0];
for(i=1;i<=n;i++)
p+=(a[i]*pow(x,i));
return p;
}
方法二:根据秦九韶算法:
可转化为:
故我们可以从内往外递推的计算多项式的值。
double f(int n,double a[],double x)
{
int i;
double p=a[n];//从最内层开始
for(i=n;i>0;i--)
p=a[i-1]+p*x;
return p;
}
两种算法时间复杂度分析:
第一种由于的时间复杂度大致为O(N)=n²。若将pow函数改为快速幂函数,则可优化为O(N)=n(logn);
第二种的时间复杂度为O(N)=n;