/*
多项式求值问题:
有如下多项式:
P (x)= An*x^n + An-1*x^(n-1) + ... +a1*x + a0
如果分别对每一项求职,需要n*(n+1)/2个乘法,效率很低
关键:采用递归式
Pn(x) = An*x^n + An-1*x^(n-1) + ... +a1*x + a0
= ((...(((An)x + An-1)x + An-2)x ...)x + A1)x + A0
自己写出递归方程:
Pn(x) = ( Pn-1(x) + An )x
其实就是:
A[x] =[ A[x-1] + 系数 ]*x
P1(x) = ( P0(x) + A1 )x,n=0,P0 = An
秦九韶算法:
y(k) = a(k) + x*y(k+1)
y(n) = a(n)
这个方法很牛逼,但是注意,采用了逆序推算的原理,因为必须要使最后一项为
An*x^n
y(n-1) = y(n)*x + A[n-1] = A[n]*x + A[n-1]
y(n-2) = [ A[n]*x + A[n-1] ] * x + A[n-2]
输入:
5(输入系数) 2(x的值)
1 2 3 4 0
输出:
49.00【1+2*x+3*x^2+4*x^3】
*/
/*
关键:
1 秦九韶算法:
y(k) = a(k) + x*y(k+1)
y(n) = a(n)
这个方法很牛逼,但是注意,采用了逆序推算的原理,因为必须要使最后一项为
An*x^n
y(n-1) = y(n)*x + A[n-1] = A[n]*x + A[n-1]
y(n-2) = [ A[n]*x + A[n-1] ] * x + A[n-2]
y(0) = A[n]*x^n + A[n-1]*x^(n-1) + ... + A[1]*x + A[0]
2 while(EOF != scanf("%d %lf",&iNum,&x))//注意double接受输入用lf,不是f
3for(int i = 0 ; i < iNum ;i++)//这里n次多项式,含有n个系数
*/
#include &
算法设计与分析:第二章 递归 2.7多项式求值问题
最新推荐文章于 2022-11-26 22:52:06 发布