horner's rule霍纳法则及综合除法
2012-03-15 23:15 youxin 阅读(1257) 评论(0) 编辑 收藏 举报首先参考 horner's rule: http://en.wikipedia.org/wiki/Horner_scheme
在synthetic divisions : http://en.wikipedia.org/wiki/Ruffini%27s_rule
pn(x)=anx^n+a(n-1)*X^(n-1)+.....+a1*x+a0;
归纳:
1基础部:n=0; 有p0=an;
2,归纳不:对任意的k,1<=k<=n;如果前面k-1步已经计算出p(k-1);
p(k-1)=anX(k-1)+a(n-1)X(k-2)+........a(n-k+2)X+a(n-k+1);
则有pk=Xp(k-1)+a(n-k);
如果用一个数组来存放多项式,把an存放于a[0],a(n-1)存放余a[1];那么多项式求值递归算法如下:
float horner_pol(float x,float a[],int n) { float p; if(n==0) p=a[0]; else p=horner_pol(x,a,n-1)*x+a[n]; return p; }
注意a[0]存放的是最大的an,a[n]存放的最好的a0。为什么?
用迭代来做:(a[]中0存放a0,1存放a[1],
#include<iostream> using namespace std; float horner(int a[],float x,int n) { float result=0; for(int i=n;i>=0;i--) { result=result*x+a[i]; } return result; } int main() { //结果19 int a[]={1,1,2,1}; int x=2; int n=3; cout<<horner(a,x,n)<<endl; }
求f(x)=x/2+x^2/4+...+x^n/2^n的和。
分析,提取一个x/2来,就有了一个递归式
f(x)=x/2 *(f(x-1)+1);
代码如下:
#include<stdio.h>
int func(int x,int n)
{
if(n==1)
return x/2;
else
return (func(x,n-1)+1)*x/2;
}
int main()
{
int x,n,result;
printf("请输入两个整数x和n\n");
while(scanf("%d%d",&x,&n)!=0)
{
result=func(x,n);
printf("结果为%d",result);
printf("\n请继续输入两个整数x和n\n");
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通