- 1、本文档共70页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言教程第六章
第六章 函数 §6.1 概述 §6.2 函数 §6.3 函数的嵌套调用 §6.4 函数的递归调用 §6.5 数组作为函数参数 §6.6 C语言的库函数 §6.7 作用域与存储类别 §6.8 本章要点小结 §6.9 本章程序举例 本章作业一 本章作业二 本章作业三 函数定义的形式: 类型名 函数名(类型名 形参1,类型名 形参2,……) { 变量定义部分 语句部分 } 函数调用表达式: 函数名(实际参数表) 函数声明的形式为: 类型名 函数名(类型名 形参1,类型名 形参2,……); 63/70 斯协旨施娱叶伎驱屈绥毅像忙饱渍交扼胃月准券股计翟勿葬押过蔓述黑辰C语言教程第六章C语言教程第六章 2、例:利用递归计算n!的函数 f(n)= n·f(n-1) (n1) 1 (n=1) long f(int n) { long y; if (n==1) y=1; else y= return(y); } n*f(n-1) ; void main( ) { int n; printf(\ninput n(n0):); scanf(%d, n); if (n=0) printf(Data error!\n); else printf(%d! =%ld\n, n, f(n)); } eg608.cpp 31/70 根曳财契所博镣侵表郊谚试试阻书倪抗贴麻郡谋珐本湛莲觅述刑壕茄黎棍C语言教程第六章C语言教程第六章 函数调用过程: main( ) { …… n=5; print(f(5)); } long f(5) { long y; …… y=5*f(4); } long f(4) { long y; …… y=4*f(3); } long f(3) { long y; …… y=3*f(2); } long f(3) { long y; …… y=3*f(2); } long f(2) { long y; …… y=2*f(1); } long f(1) { long y; y=1; …… } return(1); return(2); return(6); return(6); return(24); return(120); 32/70 巨程析徘劳作奢堕窘斧最昼蓖瞧市舟青揽怕据奥溅套烦客忆利酉死澜辑枉C语言教程第六章C语言教程第六章 三、递归的条件: 1、须有完成函数任务的语句; long f(int n) { long y; if (n==1) y=1; else y=n*f(n-1); return(y); } 2、一个确定是否能避免递归调用的测试; 3、一个递归调用语句; 该语句的参数应该逐渐逼近结束条件,以至最后断绝递归。 4、先测试,后递归调用。 在递归函数定义中,必须先测试,后递归调用。也就是说,递归调用是有条件的,满足了条件后,才可以递归。 long f(int n) { long y; y=n*f(n-1); if (n==1) y=1; return(y); } 33/70 穆葵癸耿终篡碰蔡黄安筛港霄纱咋津热屏反终柜务押骤畸蚌嫡桓蛾肪发初C语言教程第六章C语言教程第六章 四、递归的特点: 1、递归调用不是重新复制该函数,每次调用它时,新的局部变量和形参会在内存中重新分配内存单元,并以新的变量重新开始执行;每次递归返回时,当前调用层的局部变量和形参被释放,并返回上次调用自身的地方继续执行; 2、递归调用一般并不节省内存空间,因为每次调用都要产生一组新的局部变量,从而不破坏上层的局部变量; 3、递归调用一般并不能加快程序的执行速度,因为每次调用都要保护上层局部量(现场),而返回时又要恢复上层局部量,占用执行时间; 4、递归函数中,必须有结束递归的条件; 5、递归调用的优点是能实现一些迭代算法难以解决的问题。 34/70 迁艇休钨符焉猜逝城腑套枷计讹乓扇艘常漾可逊曲返至快梳稳省隙吻明厕C语言教程第六章C语言教程第六章 6.5.1 数组元素作为函数参数 6.5.2 一维数组作为函数参数 6.5.3 多维数组作为函数参数 35/70 垢矮俱花潦贞寐窝阵渣比庭稻菲陛康悟荣厚雷锁箩刃坞斑拷倡翼柠驻捏彪C语言教程第六章C语言教程第六章 6.5.1 数组元素作为函数参数 从语法角度看,实参可以是表达式形式,如常量、变量和由运算符连结的表达式形式。而数组元素可以是表达式的组成部分,所以它可以作为函数的实参;它与形参之间是以“
文档评论(0)