求222222c语言递归函数,C语言ch函数的嵌套调用和递归调用.pptx

C语言ch函数的嵌套调用和递归调用.pptx

2012/10/221 上一节我们学到了 n函数的定义 n形参 n函数的声明 n函数的调用 n实参 n函数的调用过程 n局部变量(包括形参)何时分配内容、何时释 放内存 n何时实参赋形参 2012/10/222 第7章 用函数实现模块化程序设计 n7.1为什么要用函数 n7.2怎样定义函数 n7.3调用函数 n7.4对被调用函数的声明和函数原型 n7.5函数的嵌套调用 n7.6函数的递归调用 n7.7数组作为函数参数 n7.8局部变量和全局变量 n7.9变量的存储方式和生存期 n7.10 关于变量的声明和定义 n7.11 内部函数和外部函数 2012/10/223 函数的嵌套调用nested function n函数的嵌套调用 调用一个函数的过程中,又可以 调用另一个函数 n注意 nC语言的函数定义是互相平行、独立的,即函 数不能嵌套定义 2012/10/224 嵌套调用的执行过程 main函数 调用a函数 结束 a函数 调用b函数 b函数 2012/10/225 例设计一个常用圆形体体积计算器,采用命令方 式输入1、2、3,分别选择计算球体、圆柱体、圆 锥体的体积,并输入计算所需相应参数。 n分析 n输入1、2、3选择计算3种体积,其他输入结束 计算 n设计一个控制函数cal,经它辨别圆形体的类 型再调用计算球体、圆柱体、圆锥体体积的函 数 n设计单独的函数计算不同圆形体的体积 2012/10/226 3层结构,5个函数 降低程序的构思、编写、调试的复杂度 可读性好 程序结构 main cal vol_ball vol_cylind vol_cone 程序结构 int mainvoid cal sel; void cal int sel vol_ball; vol_cylind; vol_cone; double vol_ball double vol_cylind double vol_cone main cal vol_ball vol_cylind vol_cone 源 程 序 define PI 3.141592654 void calint sel; double vol_ballvoid; double vol_cylindvoid; double vol_conevoid; int mainvoid int sel; while 1 printf“1-计算球体体积n“; printf“2-计算圆柱体积n“; printf“3-计算圆锥体积n“; printf“其他-退出程序运行n“; printf“请输入计算命令“; scanf“d“, if sel3 输入非13,循环结束 break; calsel; 输入13,调用cal return 0; /* 常用圆形体体积计算器的主控函数 */ void calint sel switch sel case 1 printf“球体积为.2fn“, vol_ball; break; case 2 printf“圆柱体积为.2fn“, vol_cylind; break; case 3 printf“圆锥体积为.2fn“, vol_cone; break; 2012/10/2210 计算球体体积 V4/3*PI*r*r*r double vol_ball double r ; printf“请输入球的半径“; scanf“lf“, return4.0/3.0*PI*r*r*r; 计算圆柱体积 VPI*r*r*h double vol_cylind double r , h ; printf“请输入圆柱的底圆半径和高“; scanf“lflf“, returnPI*r*r*h; 计算圆锥体积 Vh/3*PI*r*r double vol_cone double r , h ; printf“请输入圆锥的底圆半径和高“; scanf“lflf“, returnPI*r*r*h/3.0; 2012/10/2211 递归(Recursion) n函数直接或间接调用自己为递归 nunsigned int factunsigned int n if 0 n return 1; else return n * factn-1; 2012/10/2212 2012/10/2213 递归的实现 n递归(recursion)的定义 n调用自身的程序 n递归的基本思想 n问题分解把一个不能或 不好解决的大问题转化为 一个或几个小问题,再把 这些小问题进一步分解成 更小的小问题,直至每个 小问题都可以直接解决。 德罗斯特效应递归的视觉效应 2012/10/2214 递归应用 n递归算法一般用于解决三类问题 n1数据的定义是按递归定义的。 n求阶乘n123n 或 nnn-1 nFibonacci函数(效率极其低下) Factn 1 若n0 n * Factn-1 若n0 Fibn 0 若n0 1 若n1 Fibn-1 Fibn-2 若n0 2012/10/2215 n2数据的结构形式是按递归定义的 n树的遍历 n图的搜索 n3递归求解比迭代求解更简单的问题 n八皇后 nHanoi汉诺塔问题 2012/10/2216 递归算法 n优点简洁、紧凑而优雅(elegant) n递归的两个要素(写出递归算法的关键) n 递归出口确定递归到何时终止; n 递归式大问题是如何分解为小问题的,也 称为递归体。每次递归调用必须使用一个更小 的参数值。 解决递归问题的步骤 分析问题 递归要素 设计算法 2012/10/2217 例1 求阶乘 nn factn 1 若n0 n * factn-1 若n0 int factorialint n if 0 n return 1; return n * factorialn-1; 2012/10/2218 main fact3 fact2 fact1 printffact3 f3*fact2 f2*fact1 f1 returnf returnf returnf 递归函数 fact n 的执行过程 fact3 3*fact2 2*fact1 fact11 2*12 3*26 同时有4个函数在运 行,且都未完成 2012/10/2219 例2 互为素数的判断 n如何证明两个整数互为素数。 n例314159与271828互为素数的证明。 n如果两个整数的最大公约数为1,则两数互为素 数。 2012/10/2220 例2欧几里得算法 n两个整数x和y(xy)的最大公约数与y和xy的 最大公约数相同。也叫辗转相除法。 x 当y0 gcdx,y gcdy, xy xy 且 xy不为0 2012/10/2221 n例314159与271828互为素数的证明。 gcd314159, 271828 gcd271828, 42331 gcd42331, 17842 gcd17842, 6647 gcd6647, 4458 gcd4458, 2099 gcd2099, 350 gcd350, 349 gcd349, 1 gcd1, 0 1 2012/10/2222 欧几里得算法的递归形式 int gcdint x, int y if y0 return x; return gcdy, xy; 2012/10/2223 欧几里得算法的迭代形式 int gcdint x, int y int r; while y 0 r y; y x y; x r; return r; 2012/10/2224 反例 Fibonacci函数 n分解成的子问题必须是独立的子问题 nTfn1 1.6Tfn, 指数时间 n求F(5) nf(5)f(4)f(3); nf(4)f(3)f(2); nf(3)f(2)f(1); n其中f(3)求解2次。这显然就是时间的浪费。 fibn 0 若n0 1 若n1 fibn-1 fibn-2 若n0 2012/10/2225 Fibonacci.cpp 求Fibonacci数列值的示例算法 include int fibint n; 原型声明 int main int i; for i0; i10; i printf“fibd dn“, i, fibi; return 0; int fibint n if n 0 return 0; if n 1 return 1; return fibn-1 fibn-2; 2012/10/2226 在世界刚被创建的时候有一座钻石宝塔(塔A),其 上有64个金碟。所有碟子按从大到小的次序从塔底堆放 至塔顶。紧挨着这座塔有另外两个钻石宝塔(塔B和塔C )。从世界创始之日起,婆罗门的牧师们就一直在试图 把塔A上的碟子移动到塔C上去,其间借助于塔B的帮 助。每次只能移动一个碟子,任何时候都不能把一个碟 子放在比它小的碟子上面。有预言说,这件事完成时宇 宙会在一瞬间闪电式毁灭. 按秒钟挪动一块计算,要把64块黄金圆盘挪动完 ,要用5800亿年时间,而现在宇宙的年龄只有大约150亿 年。 例3汉诺(hanoi塔问题递归的经典问题 2012/10/2227 2012/10/2228 汉诺塔问题的递归求解 n如果 n 1,则将这一个盘子直接从塔A移到塔 C 上。否则,执行以下三步 n 将塔A上的n-1个碟子借助塔C先移到塔B上; n 把塔A上剩下的一个碟子移到塔C上; n 将n-1个碟子从塔B借助于塔A移到塔C上。 2012/10/2229 void movechar x, int n, char z 第n个圆盘从塔座x搬到塔座z printf“将d号盘从c移到cn“, n, x, z; void hanoiint n, char a, char b, char c 算法3.5 将塔座a上按直径由小到大且自上而下编号为1至n的n个圆盘 按规则搬到塔座c上。b可用作辅助塔座 if n 1 出口 movea, 1, c; 将编号为1的圆盘从a移到c else hanoin-1, a, c, b; 将a上n-1个圆盘移到b,c作辅助塔降阶递归调用 movea, n, c; 将编号为n的圆盘从a移到c hanoin-1, b, a, c; 将b上n-1个圆盘移到c,a作辅助塔降阶递归调用 int main int n; printf“3个塔座为a、b、c,圆盘最初在a座,借助b座移到c座。n请输入圆盘数“; scanf“d“, hanoin, a, b, c; 2012/10/2230 这一节我们学习了 n函数的嵌套调用 n掌握求解递归问题的方法,即递归算法的实现 n找出递归要素递归出口和递归式 n实现递归算法 2012/10/2231 作业 n通信 nP219 习题3、5、10、13 n周五(26号)800之前提交到ftp服务器 n计算机 n周三 P219 习题13、 P189 例7.8 n周日(26号)800之前提交到ftp服务器 2012/10/2232 实验03 n周日

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
蛋白质是生物体中普遍存在的一类重要生物大分子,由天然氨基酸通过肽键连接而成。它具有复杂的分子结构和特定的生物功能,是表达生物遗传性状的一类主要物质。 蛋白质的结构可分为四级:一级结构是组成蛋白质多肽链的线性氨基酸序列;二级结构是依靠不同氨基酸之间的C=O和N-H基团间的氢键形成的稳定结构,主要为α螺旋和β折叠;三级结构是通过多个二级结构元素在三维空间的排列所形成的一个蛋白质分子的三维结构;四级结构用于描述由不同多肽链(亚基)间相互作用形成具有功能的蛋白质复合物分子。 蛋白质在生物体内具有多种功能,包括提供能量、维持电解质平衡、信息交流、构成人的身体以及免疫等。例如,蛋白质分解可以为人体提供能量,每克蛋白质能产生4千卡的热能;血液里的蛋白质能帮助维持体内的酸碱平衡和血液的渗透压;蛋白质是组成人体器官组织的重要物质,可以修复受损的器官功能,以及维持细胞的生长和更新;蛋白质也是构成多种生理活性的物质,如免疫球蛋白,具有维持机体正常免疫功能的作用。 蛋白质的合成是指生物按照从脱氧核糖核酸(DNA)转录得到的信使核糖核酸(mRNA)上的遗传信息合成蛋白质的过程。这个过程包括氨基酸的活化、多肽链合成的起始、肽链的延长、肽链的终止和释放以及蛋白质合成后的加工修饰等步骤。 蛋白质降解是指食物中的蛋白质经过蛋白质降解酶的作用降解为多肽和氨基酸然后被人体吸收的过程。这个过程在细胞的生理活动中发挥着极其重要的作用,例如将蛋白质降解后成为小分子的氨基酸,并被循环利用;处理错误折叠的蛋白质以及多余组分,使之降解,以防机体产生错误应答。 总的来说,蛋白质是生物体内不可或缺的一类重要物质,对于维持生物体的正常生理功能具有至关重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值