- 1、本文档共241页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C程序设计(的20151010)
函数的递归调用 函数直接或间接地调用自身,称为递归调用 一般递归算法都必须满足三个条件: 要有明确的结束递归的条件:如n=0,n=1,此条件可以直接得出结果 要解决的问题可以转化为相对简单的同类型的问题:如n!可转化为n*(n-1)!, (n-1)!就是比n!稍简单的同类型的问题 随着问题的逐次转换,最终能达到结束递归的条件:算法中的参数n在递归过程中的逐次减少,必然会到达n=0或n=1的时候。 函数的递归调用举例,阶乘 #includeiostream using namespace std; int fac(int n) { if(n==1) return 1; return n*fac(n-1); //fac函数调用fac函数(自身),函数的递归调用 } int main() { int n, ans; cinn; ans = fac(n); //调用fac函数,计算n的阶乘 coutansendl; return 0; } 函数申明与头文件 函数申明:提供完成函数调用所必需的接口信息的说明性语句 函数申明的几点说明: 函数申明就是在函数定义格式的基础上去掉了函数体。 函数必须先申明后使用。函数原形必须位于对该函数的第一次调用处之前。 函数申明所能提供的接口信息,函数定义也能提供,因此若函数定义位于对该函数的调用之前,也可不必给出函数申明。 函数定义是一种定义性说明,函数申明是一种参考性说明 在典型的应用系统中,函数定义与函数申明的分工被明确化,提供接口信息的任务由函数申明专门担任。 将程序文件中函数的申明记录在头文件中 在程序开始处用include 命令包含该头文件 函数申明与头文件 #includeiostream using namespace std; int main() { int a, b, c; int add(int a, int b); //函数申明,没有这一条语句程序报错 cinab; c = add(a, b); //main函数调用add函数,add函数已经在前面申明 coutcendl; return 0; } //add函数定义在main函数之后,所以main函数想要调用add函数必须要先申明 int add(int a, int b) { int c; c = a + b; return c; } #includeiostream using namespace std; int add(int a, int b)//add函数定义在main函数之前 { int c; c = a + b; return c; } int main() { int a, b, c; cinab; //main函数调用add函数,不需要申明,因为add函数定义在main函数之前 c = add(a, b); coutcendl; return 0; } C++参数传递的基本方式 一、传值调用。 二、传址调用。 三、引用传递调用。 传值调用 将函数的实参表达式的值拷贝给形参。这样,实参变量和形参变量占据的是不同的存储空间,因此在函数里对形参变量的改变不会影响到实参变量的值。当函数返回时,由于对栈的操作,形参所占据的存储空间就被系统收回了,也就是说形参变量的值消失了。 这样做的好处是:通过这样的方式将形参和实参隔离,使函数与函数之间的关联减到最低,有利于实现模块化的设计,同时我们也不需要为要不要在调用函数之前保存实参的值而操心。如下例: #include iostream using namespace std; void func(int a,int b); //函数声明 int main() {int a = 10; int b = 20; func(a,b); couta=a ,b=bendl; } void func(int a,int b) { couta=a ,b=bendl; a = 30; b = 40; couta=a ,b=bendl; } 传值调用的例子(请思考输出结果) 上例结果 本程序从main()函数中的语句: int a = 10; 开始执行的,此时定义了一个全局变量a并赋初值为10,接着执行语句int b = 20;此时定义了一个全局变量b并赋初值为20;当执行到func(a,b)时,调用函数func(a,b) ,将全局变量a的值传递给局部变量a,这是两个不同的变量,分配不同的存储空间。同样将全局变量b的值传递给局部变量b,这是两个不同的变量,分配不同的存储空间。当执行func函数里的第一个cout“a=”a“ ,b=”bendl;语句时,输出的是局部变量a和b的值
文档评论(0)