利用递归思想求解指数连续增长的多项式的值用的是的秦九昭算法,从最里面的一层乘到最外面的一层,这个算法的效率要比一个项一个项的算的算法高出10倍。

这里的思想同秦九昭算法基本一致,唯一的差别就是稀疏多项式相邻两项指数之间的差距不是1,而是一个不确定的数。

另外,利用递归算法计算稀疏多项式的值不建议用函数调用的方式,因为如果当最大指数很大的时候,程序会崩溃,而我们计算一个多项式的时候,就拿书本(数据结构严蔚敏版)的一个多项式来说,指数就有2000多,因而我觉得要改用循环的模式

下面的图片是我在思考用递归算法求解稀疏多项式时的草稿,本人愚钝,用了不少例子思考,下面只是其中一个,希望对你有启发。

这里是代码,最后一个函数就是递归算法了,其他函数只是帮忙构造测验的多项式,希望能帮到你吧

#include<stdio.h>
#include<malloc.h>
#include<assert.h>
#define SIZE 20typedef struct
{double ceof;int    expn;
}Polyterm;
typedef struct PolySList
{Polyterm *data;int length;
}List;void initial(List *list);
void insert(List *list,double ceof,int expn);
void show(List *list);
double calculate(List *list,double x);int main()
{List list;initial(&list);printf("现在创建这个多项式,用来计算数值(依次输入系数和指数,-1结束)\n");double ceof;int expn;while(1){scanf("%lf%d",&ceof,&expn);if(ceof==-1)break;insert(&list,ceof,expn);}printf(">>>");show(&list);printf("请输入一个要计算的值\n");double x;scanf("%lf",&x);printf("结果是:%.2lf\n",calculate(&list,x));return(1);
}void initial(List *list)
{//本算法的功能是初始化一个顺序表list->data=(Polyterm*)malloc(SIZE*sizeof(Polyterm));assert(list->data!=NULL);list->length=0;//多项式的项数为0
}void insert(List *list,double ceof,int expn)
{//本算法的前提是顺序表已经初始化并且顺序表没有满//本算法的功能是往顺序表中插入由ceof和expn组成的项//并使多项式保持指数递增排列int i=0,j;while(i<list->length && list->data[i].expn<expn)i++;if(list->data[i].expn==expn){list->data[i].ceof+=ceof;if(list->data[i].ceof==0)//如果正好抵消{for(j=i;j<list->length-1;--j){list->data[j].ceof=list->data[j+1].ceof;list->data[j].expn=list->data[j+1].expn;}list->length--;}}else{for(j=list->length;j>i;--j){list->data[j].ceof=list->data[j-1].ceof;list->data[j].expn=list->data[j-1].expn;}list->data[i].ceof=ceof;list->data[i].expn=expn;list->length++;}
}void show(List *list)
{//本算法的前提是多项式中至少有一项//本算法的功能是显示多项式if(list->length==0)return;//多项式长度合法性判断for(int i=0;i<list->length;i++){printf("%.2lfx^%d+",list->data[i].ceof,list->data[i].expn);}printf("\b \n");
}double calculate(List *list,double x)
{//本算法的前提是多项式中至少有一项//本算法的功能是根据参数x计算多项式的值,并且返回这个值double val;int i,j;val=list->data[list->length-1].ceof;for(i=list->length-1;i>=1;--i){double t=1;for(j=list->data[i].expn-list->data[i-1].expn;j>0;--j) //递归思想计算多项式的值t*=x;val=list->data[i-1].ceof+val*t;}double t=1;for(i=list->data[0].expn;i>0;--i)t*=x;return(val*t);
}

递归思想求解稀疏多项式的值相关推荐

  1. Problem C. L04-03 n阶勒让德多项式的值(递归)---初学简单版

    用递归方法求 nn 阶勒让德多项式的值,其递推公式为: 输入 在一行中输入一个整数 nn 和整数 xx(nn 和 xx 之间用空格隔开). 输出 勒让德多项式的值.(结果保留 66 位小数) 样例 标 ...

  2. MATLAB秦九韶多项式求值算法的原理和迭代法求解的近似数值方法。

    1..熟悉常用的Matlab操作: 2.了解秦九韶多项式求值算法的原理和迭代法求解的近似数值方法. 秦九韶多项式求值算法: 迭代法求解的近似数值: x=2; for k=1:10x=(x+2/x)/2 ...

  3. 数据结构课程设计---实现一元稀疏多项式计算器

    课程设计课题: 设计一个一元稀疏多项式简单计算器,能够实现五大基本功能: (1)输入并建立多项式: (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,-,cn,en,其中n是多项式的项 ...

  4. 一元稀疏多项式计算器 【 数据结构课设作业 】 带界面,无bug,可以直接运行

    一元稀疏多项式计算器 问题描述 设计一个一元稀疏多项式简单计算器. 基本要求 (1)输入并建立多项式. (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,-,cn,en,其中n是多项式 ...

  5. Python一句话实现秦九韶算法快速计算多项式的值

    关于秦九韶算法快速计算多项式值的原理描述请参考之前推送的文章Python使用秦九韶算法求解多项式的值.本文重点演示Python函数reduce()和lambda表达式的用法.代码没加注释,如果不好理解 ...

  6. java 一元稀疏多项式简单计算器_一元稀疏多项式简单的计算器

    共回答了25个问题采纳率:92% 一元稀疏多项式计算器设计程序代码 #include #include #include #include #define maxlen 10 #define larg ...

  7. 使用分治思想求解最大子序列

    本文使用分治思想求解一个整型数组中的最大子序列,该算法的时间复杂度为NlogN,使用千万级的数据量计算结果的时间不超过0.5s.该算法使用了分治的思想:求解最大子序列的问题可以理解为将整个数组分成左右 ...

  8. matlab多项式的求值,多项式求值的MATLAB实现

    公茂果老师的课件中,给出了四种多项式求值的算法,下面给出代码示例: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %E-mail: [email protected] ...

  9. 递归 (一): 递归思想与 C++ 中的递归函数及两个递归应用示例 (斐波那契, 汉诺塔)

    您也可以在我的个人网站中查看此文:http://zhaokaifeng.com/?p=1502 谢谢您的访问 : ) 什么是递归 从汇编层面上看递归 在汇编层面上, 递归可以看作是两个循环, 每个循环 ...

最新文章

  1. Linux目录结构和文件基本操作
  2. R语言ggplot2可视化并添加特定区间的回归线、R原生plot函数可视化并添加特定区间的回归线:Add Regression Line Between Certain Limits
  3. 【一周速递】计算机视觉/图像处理论文集
  4. 多个旅游网站被挂马 五一假期外出旅游应小心
  5. 怎样下载python模块sublime text3中_Python3.7.3安装教程并集成Sublime Text3
  6. Java开源并行计算组件Multi-Task
  7. 陶哲轩实分析 定理 13.1.5
  8. 深度学习《Photo Editing》
  9. Silverlight(CodeNameWPF/E) Features一览表
  10. C#中对 API函数的调用
  11. 由UIview获得其controller
  12. 软件工程课程设计 java_软件工程课程设计——实现一个基本的学生教务系统
  13. html语言hr标记,HTML水平线段HR标记详解
  14. Beta周王者荣耀交流协会第六次会议
  15. 1.4.17 实验17:ASBR
  16. 物联网通信技术第9章 异构网络协同通信
  17. 富兰克林自传-读书记
  18. 【TDA2x学习】待整理笔记
  19. 如何理解C语言链表,如何理解c语言链表
  20. 吐槽M1是耻辱,发布会放烟雾弹,老罗的单口相声还是比坚果Pro好看

热门文章

  1. Hadoop集群的配置
  2. Gradle 7.0+发布Gradle插件到私有maven仓库笔记
  3. win10连接实验室惠普打印机
  4. 网络游戏和视频体验度量
  5. 无人机远距离WiFi图传应用,CV5200无线WiFi模组,远程实时通信传输方案
  6. OGame银河系说明
  7. CC1310空中升级笔记05 BIM适配工程处理
  8. 浅谈IDEA的安装与JavaWeb工程的创建
  9. 揭秘任务型对话机器人(上篇)
  10. linux下如何查看BIOS版本,在Ubuntu下查看BIOS资料