如何用数据结构算法求1000递归求n的阶乘时间复杂度

面向对象编程,我想大家都很清楚了. 函数式编程是将函数本身作为处理对象的编程范式. 最常用的就是lambda(匿名函数),有木有印象!!! 而且在定义一个lambda的

  函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念   对象是面向对象的第一型,那么函数式编程也是一样,函数是函数式编程的第一型

什么是函数式编程 函数式编程是一种编程规范,常见的编程规范有命令式编程,函数式编程,逻辑式编程 ,常见的面向对象编程也是一种命令式编程。 命令式编程 :命令式编程是面向

实际上函数式编程已经推出很长一段时间了,JDK8开始支持,类似于我们把NIO称之为New IO实际上NIO也推出好一阵子了,已经不new。平时写代码的时候也会用到函数式编程,采

wilyes11 收集博客 (与学习无关 ): 线性表的应用 一、问题描述 线性表有两种不同的存储结构,分别是顺序存储结构和链式存储结构,在实际中应用 十分广泛。 本设计要求分别利用线性表的两种存储结构,设计算法完成对大数的阶乘、加法、 乘法的求解。 二、基本要求 1、选择合适的存储结构实现大数存储; 2、设计算法,采用顺序存储结构完成大数的阶乘运算; 3、设计算法,采用链式存储结构完成大数的加法运算; 4、设计算法,选择合适的存储结构完成大数的乘法运算; 5、其中某一算法采用两种存储结构实现。 三、测试数据 1、阶乘运算的测试数据:63! 2、加法运算的测试数据: +99 3、乘法运算的测试数据:×99 四、算法思想 1、阶乘运算的算法思想:一个数的阶乘,利用一个顺序表来存储结果,首先令 L.elem[0]=1,其他全部赋值为零,再用for循环,从1 至 i 完成阶乘运算,其中由于位数 越乘越多, 故将其按位存储在顺序表中,防止数据范围溢出,在逐位相乘中,利用for 循环 位 数 , 如 若 有 进 位 问 题 , 每 次 运 算 时 , 此 位 保 留 的 数 位 , t=L.elem[j]*i+jw; L.elem[j]=t%10;jw=t/10;如果满足 j=top 程序跳出,进行下一步i 运算,此处 top 位保留上一位的位数,如此运算下去,输出顺序表。 2、加法运算的算法思想:本运算分别采用了两种存储结构,链式和栈存储结构。加法 是两个数位数对齐,从低位向高位加的运算,如果在哪位有进位,则后一位,进行加法还要 另加上前面的进位,由此将输入的字符大数,存入链表中,且改为整形存入,此时是的链表 时,自然当相等的长度加完后在执行下面的判断,保留住剩下的数同时每次加上jw,最后 就是当最后一位有进位时将最后一个链表值赋jw,由于现在此链表存储的结果是反序的, 故将其压入栈中,让后再输出栈元素,就是想加的结果。 3、加法运算的算法思想:主要采用顺序存储结构,先从低位算起,只须要对应的位相 加,再加上前一位的进位,使用变量jw 存储, 每次运算时加上jw 运算, 再去判断是否本位 wilyes11 收集博客 (与学习无关 ): 是否有进位,有则将 jw 的值赋成本位进位数;没有进位,则给进位赋值0。其中,若两个 加数中那一个数的位数长,以位数长的作为循环变量;结束循环时, 不仅仅是最后一位加完 就停止,还应加入如果有进位,也要再循环一次。如最后一位是9,进位是1,则相加时进 位,要加上进位这一位值。 4、乘法运算的算法思想:传入的乘数和被乘数是以字符串形式放入的,为了要让指针 指向最后一位, 自己写了个函数StrNum2 倒着赋值, 同时因为传入和保存的都是字符,所以 计算时要将字符转化为数字;从低位向高位乘,在竖式计算中, 我们是将乘数第一位与被乘 数的每一位相乘,记录结果,之后,用第二位相乘,记录结果并且左移一位,以此类推,直 到计算完最后一位,再将各项结果相加,得出最后结果。 当然我们可以直接用这种方法,但 要用多个数据来保存计算出的分结果,之后结果再相加得到最后结果,但是这样会浪费很 多空间, 所以我们可以再优化一下,就是只用一个顺序表来表示结果,先把第一位乘数与被 乘数的结果保存在链表中,之后把存储结果的和第二次如此算的结果加在第一次的基础上, 二者使用同一个顺序表来表示,以此类推, 直到结束, 这样就可以用一个顺序表来存储相乘 后的结果。 另外在运算时乘和加都有进位时要处理,就和大数加法中进位采取方法一样,当 前的值加上进位的值再看本位数字是否又有进位就行。 五、模块划分 1、 void factorial(),利用顺序存储结构完成大数阶乘运算; 2、int StrToNum1(SqList L,char *a),将字符串转换为整形数组,正向赋值; 3、void addition(),利用顺序存储结构完成大数的加法; 4、 void addition1(),将字符串转换为整形数组,反向传入链表中赋值,并利用链式 存储结构完成大数的加法运算,最后用栈来输出结果;

线性 应用 利用 运用 算法 数据结构 课程设计

  蚂蚁文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

中国大学mooc数据结构与算法1(张淼 2021春季学期) 慕课答案100分免费版

1、 以下与数据的存储结构无关的术语是()

2、 某算法的时间复杂度是O(),表明该算法的()

答案: 执行时间与正比

3、 以下关于数据结构的说法中,正确的是()

A:数据的存储结构独立于其逻辑结构
B:数据结构仅由其逻辑结构和存储结构决定
C:数据的逻辑结构独立于其存储结构
D:数据的逻辑结构唯一决定了其存储结构
答案: 数据的逻辑结构独立于其存储结构

4、 以下算法的时间复杂度为()

5、 求整数n(n≥0)阶乘的算法如下,其时间复杂度是()

6、 在存储数据时,通常不仅要存储各数据元素的值,而且还要存储()

C:数据元素之间的关系
答案: 数据元素之间的关系

11、 以下数据结构中,()是非线性数据结构。

12、 在线性表中,处理开始元素外,每个元素()

C:只有唯一的后继元素
D:只有唯一的前驱元素
答案: 只有唯一的前驱元素

13、 若线性表最常用的操作是存取第i个元素及其前驱后继元素的值,为了提高效率,应采取()的存储方式

14、 在一个长度为n的顺序表中删除第i个元素(1≤i≤n)时,需向前移动()个元素

15、 设线性表中有2n个元素,()在单链表上的实现比在顺序表上的效率高

A:在最后一个元素的后面插入一个新元素
B:删除所有值为x的元素
D:顺序输出前k个元素
答案: 删除所有值为x的元素

16、 单链表中,增加一个头结点的目的是()

A:说明单链表是线性表的链式存储
B:标识表结点中首结点的位置
D:是单链表中至少有一个结点

20、 以下()是一个线性表

B:由n个实数组成的集合
C:由100个字符组成的序列
D:所有整数组成的序列
答案: 由100个字符组成的序列

21、 一个线性表最常用的操作是存取任意指定序号的元素和最后进行插入删除操作,则利用()存储方式可以节省时间

B:带头结点的双循环链表

22、 对于顺序表,访问第i个位置的元素和第i个位置插入一个元素的时间复杂度为()

25、 在一个单链表中,已知q所指向结点是p所指结点的前驱节点,若在q和p之间插入结点s,则执行()

27、 下列关于线性表说法正确的是()

A:顺序存储方式只能用于存储线性结构
B:在一个长度为n的有序单链表中插入一个新结点并仍保持有序的时间复杂度是O(n)
C:取线性表第i个元素的时间与i的大小无关
D:静态链表需要分配较大的连续空间,插入和删除不需要移动元素
答案: 在一个长度为n的有序单链表中插入一个新结点并仍保持有序的时间复杂度是O(n);
静态链表需要分配较大的连续空间,插入和删除不需要移动元素

28、 数据元素是数据的最小单位。

29、 一个数据结构是由一个逻辑结构、物理结构和这个逻辑结构上的一个基本运算集构成的整体。

30、 算法是对特定问题求解步骤的一种描述,是()的指令序列

作业第一课 第一课作业

1、 简述逻辑结构与存储结构的关系。
评分规则:  数据的逻辑结构是从具体问题中抽象出来的数学模型,体现了事物的组成和事物之间的逻辑关系。
数据的存储结构主要用来解决各种逻辑结构在计算机中物理存储表示的问题。

2、 度量一个算法的执行时间通常有几种方法?各有何优缺点?
评分规则:  事前分析和事后统计
事前分析: 优点,程序不必运行,所得结果只依赖于算法本身 缺点,不够精确
事后统计: 优点,精确 缺点,必须运行程序,所得结果依赖于硬件、环境等因素

5、 线性表可以用于顺序表或链表存储,试问:两种存储表示各有哪些主要优缺点?如果有n个表同时并存,并且在处理过程中各表的长度会动态变化,表的总数也可能自动改变,在此情况下,应选用哪种存储表示?为什么?若表的总数基本固定,且很少进行插入和删除,但要求以最快的速度存取表中的元素,应采用哪种存储表示?为什么?
评分规则:  言之有理即可

作业第二课 第二课作业

1、 简述线性表、栈和队列的异同。

3、 内存中一片连续空间(不妨假设地址从1到m),提供给两个栈S1和S2使用,怎样分配这部分存储空间,使得对任一个栈,仅当这部分空间全满时才发生上溢。

1、 假定利用数据a[n]顺序存储一个栈,用top表示栈顶指针,top==-1表示栈空,并已知栈未满,当元素x进栈时执行的操作是()

2、 用S表示进栈操作,用X表示出栈操作,若元素的进栈顺序是1234,为了得到1342的出栈顺序,相应的操作序列是()

3、 用链式存储方式的队列进行删除操作时()

B:头尾指针可能都要修改
答案: 头尾指针可能都要修改

4、 一个队列的入队顺序是1,2,3,4,则出队的顺序是()

5、 假设循环单链表表示的队列长度为n,队头固定在链表尾部,若只设置头指针,则进队操作的时间复杂度是()

6、 ()不是栈的基本操作

7、 设链表不带头结点且所有操作均在表头进行,则下列最不适合链栈的是()

A:只有表尾结点指针,没有表头指针的双向循环链表
B:只有表头结点指针,没有表尾指针的单向循环链表
C:只有表头结点指针,没有表尾指针的双向循环链表
D:只有表尾结点指针,没有表头指针的单向循环链表
答案: 只有表头结点指针,没有表尾指针的单向循环链表

8、 3个不同元素依次进栈,能得到()种不同的出栈序列

9、 栈和队列的主要区别在于()

A:它们的存储结构不一样
B:它们的逻辑结构不一样
C:所包含的元素不一样
D:插入、删除操作的限定不一样
答案: 插入、删除操作的限定不一样

10、 在一个链队列中,假设队头指针是front,队尾指针是rear,x所指向的元素需入队,则执行的操作是()


打开手机微信,扫一扫下方二维码,关注微信公众号:萌面人APP



1.可查看各种网课答案

点击【萌面人官网】,可查看知到智慧树,超星尔雅学习通,学堂在线等网课答案

点击【中国大学慕课答案】,可查看mooc慕课答案

2.可一键领取淘宝/天猫/京东/拼多多无门槛优惠券

如图所示,点击对应图标即可领取淘宝/天猫/京东/拼多多无门槛优惠券


我要回帖

更多关于 递归求n的阶乘时间复杂度 的文章

 

随机推荐