- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章C程序设计教程与实验指导杨国兴函数会计学第1页/共29页第3章 函数3.1 函数的递归调用 3.2 内联函数3.3 函数重载3.4 带默认参数值的函数3.5 变量的存储类别3.6 程序实例f函数f1函数f2函数调用f函数调用f1函数调用f2函数第3章 函数第2页/共29页3.1 函数的递归调用 一个函数在它的函数体内,直接或间接地调用它自身,称为递归调用。这种函数称为递归函数。 直接或间接调用函数自身的情况如图: 直接调用间接调用 这两种递归调用都是无中止地调用自身,显然是不正确的。为了防止递归调用无终止地进行,必须在函数内有终止递归调用的手段。第3页/共29页第3章 函数例3.1用递归的方法求 n!分析:计算n!的公式为: 1 n =1或 0 y = n*(n-1)! n 1 可以将求n!转化为求(n-1)!,再继续转化为求(n-2)!,到1时应停止递归#include iostreamusing namespace std;long power(int n);void main(){ int n; long y; cout input a integer number:; cin n; y=power(n); cout n !=? y endl;}long power(int n){ long f; if(n1)? f=n*power(n-1); else f=1; return f;}例3.1的递归过程分析第4页/共29页第3章 函数n-1个盘子的Hanoi问题第5页/共29页第3章 函数例3.2 Hanoi塔问题 有三根针A、B、C,A针上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示。要求将这n个盘子从A针移到C针,在移动过程中可以借助B针,每次只能移动一个盘子,并且在移动过程中三根针上的盘子都保持大盘在下,小盘在上。分析:将n个盘子从A针移到C针可以分解为以下三个步骤:(1)将A针上的n-1个盘子借助C针移到B针上;(2)将A针上剩下的一个盘子移到C针上;(3)将B针上的n-1个盘子借助A针移到C针上。BCA第6页/共29页第3章 函数例3.2 Hanoi塔问题源程序#include iostreamusing namespace std;void Move(char x,? char y);void Hanoi(int n, char one, char two, char three);void main(){ int n; cout 请输入盘子数:; cin n; cout n 个盘子的移动过程为: endl; Hanoi(n, A, B, C);}//函数Move()将一个盘子从x针移到y针void Move(char x,? char y){ cout x -- y endl;} 返 回第3章 函数第7页/共29页例3.2 Hanoi塔问题源程序(续)//函数Hanoi()将n-1个盘子从one针借助two针移到three针void Hanoi(int n, char one, char two, char three){ if(n==1) Move(one, three); else { Hanoi(n-1, one, three, two); Move(one, three); Hanoi(n-1, two, one, three); }}程序运行结果:A?CA?BC?BA?CB?AB?CA?C运行演示第8页/共29页第3章 函数3.2 内联函数 内联函数与一般函数的区别在于它不是在调用时发生控制转移,而是在编译时将被调函数体嵌入到每一个函数调用处,节省了参数传递、控制转移等开销。对于一些规模较小、频繁调用的函数可声明为内联函数,能提高程序运行效率。 内联函数的定义: inline 类型说明符 函数名(参数及类型表) {函数体} 注意:只有简单的函数才能成为内联函数,如函数体中不能有循环语句和switch语句等。 内联函数的定义必须出现在内联函数第一次被调用之前。 返 回第3章 函数第9页/共29页例3.3使用内联函数void main(){ int a, b, c; a = 10; b = 20; c = Add(a,b); cout a + b = c endl; c = Add(a,50); cout a + 50 = c endl; c = Add(50,50); cout 50 + 50 = c endl;} #include iostreamusing namespace std;inli
原创力文档


文档评论(0)