用C++实现秦九韶算法~怎么搞的~

来源:百度知道 编辑:UC知道 时间:2024/05/04 11:09:28
本人调试的源程序如下:
#include<iostream>
using namespace std;
int P(int x,int n);
void main(){
int x=2,n=4;
cout<<P(x,n)<<endl;
}

int P(int x,int n){
int sum=0;
int a[5]={1,2,2,2,1};
for(int i=0;i<=n;i++){
int y=a[i];
for(int j=i;j<=n;j++)
{
y=y*x;
}
sum+=y;
}
return sum;
}

此为用递归法实现的,可是运行结果得到的是90,但正确答案应为45.高手来解解迷~
把一个n次多项式f(x) = a(n)×x^n + a(n – 1)x^n – 1 + …… + a(1)x + a(0),分拆成n个一次多项式:v(1) = a(n)x + a(n – 1)、v(2) = v(1)x + a(n – 2)、v(3) = v(2)x + a(n – 3)……v(n) = v(n – 1)x + a(0),这种算法叫做秦九韶算法。
注:括号里的数表示下标

楼主,你的循环实际等于 1*2*2*2*2*2+2*2*2*2*2+2*2*2*2+2*2*2+1*2, 等于32+32+16+8+2=90。其中 i=0时:y = 1*2*2*2*2*2 ,i=1时:y =2*2*2*2*2 ,i=2时:y = 2*2*2*2 ,i=3时:y =2*2*2 ,i=4时:y = 1*2. 鉴定完毕。

干吗用二重循环阿,根本没有你写的复杂阿?

看:

int P(int x,int n){
int a[5]={1,2,2,2,1};
int y=a[n];
for(int i=n;i>=1;--i){
y=y*x+a[i-1];
}
return y;
}

v(1) = a(n)x + a(n – 1)、v(2) = v(1)x + a(n – 2)、v(3) = v(2)x + a(n – 3)……v(n) = v(n – 1)x + a(0),
直接按公式写,很简单 阿?