C++课件四函数.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C课件四函数

2.递归调用机制 任何函数之间不能嵌套定义。 但调用函数与被调用函数之间相互独立。 发生调用时,被调用函数中保护了调用函数的运行环境和返回地址,使得调用函数的运行状态可以在被调用函数运行返回后完全恢复,而且该状态与被调用函数无关。 被调用函数运行的代码虽是同一代码,但由于调用点,调用状态,返回点不同,可以看作函数的一个副本,与调用函数的代码无关,因此函数的代码是独立的。 3.递归调用的形式 直接递归调用和间接递归调用 long fib(int x) { if(x2) return (fib(x-1)+fib(x-2)); else return 1; } int fn1 (int a) { int b; b=fn2(a+1); …. } int fn2(int s) { int c; c=fn1(s-1); …. } 4.递归条件 一个确定是否能避免递归调用的测试。 一个递归调用语句 先测试,后递归。 void count(int val ) { if val1 count(val-1); cout“ok”valendl; } void count(int val ) { count(val-1); if val1 cout“ok”valendl; } 例: 用递归函数求Fibonacci数列 #includeiostream.h unsigned long fibo(unsigned long); //声明函数 void main( ) { unsigned long result, temp; cout Enter an integer: ; cin temp; result = fibo(temp); //调用函数 cout Fibonacci( temp )= result endl; } unsigned long fibo(unsigned long n) //定义函数 { if( n = = 0 || n = = 1) return n; //边界条件 else return fibo(n-1) + fibo(n-2); } //递归调用 结果: Enter an integer: 3 Fibonacci(3) = 3 递归执行流程 fibo(3) return fibo(2)+fibo(1) return fibo(1)+fibo(0) return 1 return 1 return 1 5.递归评价 空间、时间开销大 编程简化 §4.8 内嵌函数 为什么要内嵌函数 : 程序中对函数的调用过于频繁,导致程序执行时间加长。内嵌函数的使用可提高程序执行效率。 内嵌函数的定义: 在函数声明时加inline 例如:inline void swap(int , int ); 内嵌函数作用机理 把内嵌函数的代码直接嵌人函数调用处,而不是转到调用函数的代码处。这样减少了调用转换的开销。 内嵌函数的缺点 程序执行效率提高了,但可执行程序规模变大了。实际应用中要权衡效率和规模之间的关系。 例:内嵌函数的定义使用 #include iostream.h inline int max(int a, int b); { if( ab) return a; else return b; } void main( ) { int x, y; cout Enter two integers: ; cin x y; cout max= max(x,y) endl; } 结果: Enter two integers: 10 28 max= 28 内联函数的函数体限制 1 不能含有复杂的结构控制语句 如 :switch while for 如含有这些语句则作一般函数对待 2 递归函数不能作为内联函数 内联函数与宏定义比较 c语言中宏 #define Max(a,b) (ab? a:b) 缺常规函数类型检查 §4.9 函数模板 考虑重载函数: 如: int max (int x, int y) { return (xy? x:y); } double max( dou

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档