C语言教程第六章.ppt

  1. 1、本文档共70页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

第六章函数§6.1概述§6.2函数§6.3函数的嵌套调用§6.4函数的递归调用§6.5数组作为函数参数§6.6C语言的库函数§6.7作用域与存储类别§6.8本章要点小结§6.9本章程序举例本章作业一本章作业二本章作业三函数定义的形式:类型名函数名(类型名形参1,类型名形参2,……){变量定义部分语句部分}函数调用表达式:函数名(实际参数表)函数声明的形式为:类型名函数名(类型名形参1,类型名形参2,……);63/702、例:利用递归计算n!的函数f(n)=n·f(n-1)(n1)1(n=1)longf(intn){longy;if(n==1)y=1;elsey=return(y);}n*f(n-1);voidmain(){intn;printf(\ninputn(n0):);scanf(%d,n);if(n=0)printf(Dataerror!\n);elseprintf(%d!=%ld\n,n,f(n));}eg608.cpp31/70函数调用过程:main(){……n=5;print(f(5));}longf(5){longy;……y=5*f(4);}longf(4){longy;……y=4*f(3);}longf(3){longy;……y=3*f(2);}longf(3){longy;……y=3*f(2);}longf(2){longy;……y=2*f(1);}longf(1){longy;y=1;……}return(1);return(2);return(6);return(6);return(24);return(120);32/70三、递归的条件:1、须有完成函数任务的语句;longf(intn){longy;if(n==1)y=1;elsey=n*f(n-1);return(y);}2、一个确定是否能避免递归调用的测试;3、一个递归调用语句;该语句的参数应该逐渐逼近结束条件,以至最后断绝递归。4、先测试,后递归调用。在递归函数定义中,必须先测试,后递归调用。也就是说,递归调用是有条件的,满足了条件后,才可以递归。longf(intn){longy;y=n*f(n-1);if(n==1)y=1;return(y);}33/70四、递归的特点:1、递归调用不是重新复制该函数,每次调用它时,新的局部变量和形参会在内存中重新分配内存单元,并以新的变量重新开始执行;每次递归返回时,当前调用层的局部变量和形参被释放,并返回上次调用自身的地方继续执行;2、递归调用一般并不节省内存空间,因为每次调用都要产生一组新的局部变量,从而不破坏上层的局部变量;3、递归调用一般并不能加快程序的执行速度,因为每次调用都要保护上层局部量(现场),而返回时又要恢复上层局部量,占用执行时间;4、递归函数中,必须有结束递归的条件;5、递归调用的优点是能实现一些迭代算法难以解决的问题。34/706.5.1数组元素作为函数参数6.5.2一维数组作为函数参数6.5.3多维数组作为函数参数35/706.5.1数组元素作为函数参数从语法角度看,实参可以是表达式形式,如常量、变量和由运算符连结的表达式形式。而数组元素可以是表达式的组成部分,所以它可以作为函数的实参;它与形参之间是以“值传递”的形式进行参数传递,即单向传递。例:有两个数组a、b,各有10个元素,将它们对应地逐个相比,分别统计出两个数组相应元素大于、等于、小于的次数。for(i=0;i10;i++)result=large(a[i],b[i]);intlarge(intx,inty){}intflag;if(xy)flag=1;elseif(x==y)flag=0;elseflag=-1;return(flag);if(result==1)m++;elseif(r

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档