函数函数(Function)是功能抽象的模块.ppt
第4章 函数,函数(Function)是功能抽象的模块,函数,参数,返回值,输入流,输出流,第4章 函数,函数(Function)是功能抽象的模块,函数作用 实现一个功能;代码重用 函数是C+程序的重要组件,一个程序文件可以包含若干个函数,无论把一个程序划分为多少个程序模块,只能有一个main函数。,初步的认识,1 定义printstar和print_message函数时,括号内的void表示“没有参数函数”,即调用此函数时不必也不能给出参数。2 程序的执行从main函数开始,调用其他函数后流程回到main函数,最后在main函数中结束整个程序的运行。3 所有函数都是平行的,即在定义函数时是相互独立的。但函数不能嵌套定义,也即在定义一个函数过程中不能又定义另外一个函数,同时也不能把函数的定义部分写在主函数中。4 main可以调用其他函数,各个函数之间可以互相调用,但不能调用main函数。5 main函数所调用的函数,前面必须进行声明。,根据函数的形式:无参函数:调用函数时,不必给出参数有参函数:在调用函数时,要给出参数,函数定义由两部分组成:函数首部和函数操作描述,4.1 函数的定义,/求圆柱体体积#include double volume(double radius,double height)return 3.14*radius*radius*height;void main()double vol,r,h;cin r h;vol=volume(r,h);cout Volume=vol endl;,4.1 函数的定义,/求圆柱体体积#include double volume(double radius,double height)return 3.14*radius*radius*height;void main()double vol,r,h;cin r h;vol=volume(r,h);cout Volume=vol endl;,函数定义,4.1 函数的定义,/求圆柱体体积#include double volume(double radius,double height)return 3.14*radius*radius*height;void main()double vol,r,h;cin r h;vol=volume(r,h);cout Volume=vol endl;,函数调用,函数定义形式,类型 函数名(void)语句序列,4.2 函数参数,3.1.1 函数定义,类型 函数名(形式参数表)语句序列,无参函数,有参函数,形式参数和实际参数,形式参数:在定义函数时函数名后面括号中的变量名称为形式参数实际参数:在主函数中调用一个函数时,函数后面括号中的参数,函数定义形式,类型 函数名(形式参数表)语句序列,4.2 函数定义和参数,函数头函数接口,包括:,3.1.1 函数定义,函数定义形式,类型 函数名(形式参数表)语句序列,4.2 函数定义和参数,函数头函数接口,包括:,函数返回值类型 函数体中由 return 语句返回的值的类型。没有 返回值其类型为void,3.1.1 函数定义,函数定义形式,类型 函数名(形式参数表)语句序列,4.2 函数定义和参数,函数头函数接口,包括:,函数返回值类型 函数体中由 return 语句返回的值的类型。没有 返回值其类型为void,函数名 用户定义标识符,3.1.1 函数定义,函数定义形式,类型 函数名(形式参数表)语句序列,4.2 函数定义和参数,函数头函数接口,包括:,函数返回值类型 函数体中由 return 语句返回的值的类型。没有 返回值其类型为void,函数名 用户定义标识符,形式参数表 逗号分隔的参数说明表列,缺省形式参数时不 能省略圆括号。一般形式为:类型 参数1,类型 参数2,类型 参数n,3.1.1 函数定义,函数定义形式,4.2 函数定义,函数头函数接口,类型 函数名(形式参数表)语句序列,函数体函数的实现代码。,3.1.1 函数定义,例3-1,4.2 函数定义,void printmessage()cout How do you do!endl;,3.1.1 函数定义,例3-1,4.2 函数定义,void printmessage()cout How do you do!endl;,函数返回值类型无返回值,3.1.1 函数定义,例3-1,4.2 函数定义,void printmessage()cout How do you do!endl;,函数名,3.1.1 函数定义,例3-1,4.2 函数定义,void printmessage()cout How do you do!endl;,形式参数表无参数,3.1.1 函数定义,例3-1,4.2 函数定义,void printmessage()cout How do you do!endl;,函数体无 return 语句,3.1.1 函数定义,例3-2,4.2 函数定义,double max(double x,double y)if(x y)return x;else return y;,3.1.1 函数定义,例3-2,4.2 函数定义,double max(double x,double y)if(x y)return x;else return y;,函数返回值类型,3.1.1 函数定义,例3-2,4.2 函数定义,double max(double x,double y)if(x y)return x;else return y;,函数名,3.1.1 函数定义,例3-2,4.2 函数定义,double max(double x,double y)if(x y)return x;else return y;,形式参数表,3.1.1 函数定义,例3-2,4.2 函数定义,double max(double x,double y)if(x y)return x;else return y;,函数体,3.1.1 函数定义,例3-2,4.2 函数定义,double max(double x,double y)if(x y)return x;else return y;,返回值,return 语句形式:return 表达式 或return(表达式)作用:返回函数值 不再执行后续语句,程序控制返回调用点 一个函数体内可以有多个return 语句 表达式 返回值的类型与函数类型不相同时,自动强制转换成函数的类型,3.1.1 函数定义,(1)在定义函数时指定的形参,在未出现函数调用时,他们并不占内存中的存储单元,(所以称他们为形式参数或虚拟参数),表示他们并不是实际存在的数据。只有在发生函数调用时,函数中的形参才被分配内存单元,以便接受从实参传来的数据。在调用结束后,形参所占的内存单元也被释放。(2)实参可以是常量,变量或表达式。(3)定义函数时,必须在函数首部指定形参的类型。(4)实参与形参的类型应相同或赋值兼容。如果两者不相同,则按照赋值的规则进行转换。(5)实参变量对形参变量的数据传递时“值传递”,即单向传递,只有实参传给形参,而不能又形参传回给实参。,4.3 函数的返回值,函数通过匿名对象返回结果值 函数值的类型是匿名对象的类型 return 语句把表达式的值赋给匿名对象,Type FunctionName()/statements return expression;,expression,Type 可以为各种C+基本数据类型、类类型,以及这些类型 的指针或引用,3.2.4 函数的返回类型,(1)函数的返回值是通过函数中的return语句获得的。return语句将被调用函数中的一个固定值带回主函数中。(2)函数值的类型。既然函数有返回值,这个值的类型由定义函数时指定函数值的类型来确定。(3)如果函数值的类型和return语句中的表达式的值不一致,则以函数类型为准,即函数类型决定返回值的类型。,调用形式,函数名(实际参数表列),4.4 函数的调用,3.1.2 函数调用,如果调用无参函数,则“实际参数表列”可以没有,但括号不能省略。如果实参表列包括多个多个参数,则各参数间用逗号隔开。实参和形参的个数应该相等,类型匹配或者赋值兼容,顺序一一对应进行传递数据。,调用形式,函数名(实际参数表),4.4 函数的调用,函数名 函数的入口地址,3.1.2 函数调用,调用形式,函数名(实际参数表),4.4 函数的调用,函数名 函数的入口地址,实际参数表 与形式参数必须在个数、类型、位置一一对应,3.1.2 函数调用,4.4 函数的调用,按函数在语句中的作用来分,可以有以下3种函数调用方式:1 函数语句:把函数调用单独作为一个语句,并不要求函数带回一个值,只是要求函数完成一定的操作。printstar();2 函数表达式:函数出现在一个表达式中,要求函数带回一个确定的值以参加表达式的运算。C=2*max(a,b)3 函数参数:函数调用作为一个函数的实参。m=max(a,max(a,b);,4.4 函数调用,#includevoid printmessage()cout How do you do!endl;void main()printmessage();,例3-1,3.1.2 函数调用,4.4 函数调用,#includevoid printmessage()cout How do you do!endl;void main()printmessage();,函数调用语句,例3-1,3.1.2 函数调用,4.4 函数调用,例3-2,#includedouble max(double x,double y)if(x y)return x;else return y;void main()double a,b;cin a b;double m=max(a,b);cout max(m,3.5)endl;,3.1.2 函数调用,4.4 函数调用,例3-2,#includedouble max(double x,double y)if(x y)return x;else return y;void main()double a,b;cin a b;double m=max(a,b);cout max(m,3.5)endl;,函数调用表达式,3.1.2 函数调用,4.4 函数调用,例3-2,#includedouble max(double x,double y)if(x y)return x;else return y;void main()double a,b;cin a b;double m=max(a,b);cout max(m,a+3.5)endl;,cout max(max(a,b),a+3.5)endl;,实际参数是表达式,3.1.2 函数调用,(1)首先被调用的函数必须是已经存在的函数(是函数库或者用户自己定义的函数)(2)如果是使用库函数,一般还应该在本文件开头用#include命令将有关头文件“包含”到本文件中来。例如,如果用到数学库函数,就用#include(3)如果使用用户自己定义的函数,该函数必须跟主函数在同一个程序单元中,如果位置在主函数之后,则必须在调用此函数之前对被调用函数之前进行声明。,4.4.1 调用函数的前提(调用函数的声明),定义函数和声明函数的区别,定义:对函数功能的确立,包括指定函数名,函数类型,形参及其类型,函数体等。是一个完整的、独立的函数单位。声明:仅把函数的名字,函数类型及其形参的个数,类型和顺序通知编译系统。声明函数中可以不写形参名,而写形参的类型。如:,#include double volume(double,double);void main()double vol,r,h;cin r h;vol=volume(r,h);cout Volume=vol endl;double volume(double radius,double height)return 3.14*radius*radius*height;,4.4.2 函数原型,函数原型的作用是告诉编译器有关函数的信息:函数的名字函数返回的数据类型函数要接受的参数个数、参数类型和参数的顺序 编译器根据函数原型检查函数调用的正确性 函数原型的形式:类型 函数名(形式参数表);,3.1.3 函数原型,函数声明中也可以不写形参名,而只写形参的类型。,例如:double volume(double,double);,函数原型是声明语句,4.4.2 函数原型,#include double max(double,double);/函数原型void main()double a,b,c,m1,m2;cout a b c;m1=max(a,b);/函数调用 m2=max(m1,c);cout y)return x;else return y;,使用函数原型,3.1.3 函数原型,4.4.1 函数原型,#include double max(double,double);/函数原型void main()double a,b,c,m1,m2;cout a b c;m1=max(a,b);/函数调用 m2=max(m1,c);cout y)return x;else return y;,函数原型的参数表不需要参数名,使用函数原型,3.1.3 函数原型,4.4.1 函数原型,#include double max(double,double);/函数原型void main()double a,b,c,m1,m2;cout a b c;m1=max(a,b);/函数调用 m2=max(m1,c);cout y)return x;else return y;,函数调用出现在定义之前函数原型声明是必须的,使用函数原型,3.1.3 函数原型,4.4.1 函数原型,函数定义在调用之前,#include double max(double x,double y)/函数定义 if(x y)return x;else return y;void main()double a,b,c,m1,m2;cout a b c;m1=max(a,b);/函数调用 m2=max(m1,c);cout Maximum=m2 endl;,3.1.3 函数原型,4.4.2 函数原型,函数定义在调用之前,#include double max(double x,double y)/函数定义 if(x y)return x;else return y;void main()double a,b,c,m1,m2;cout a b c;m1=max(a,b);/函数调用 m2=max(m1,c);cout Maximum=m2 endl;,3.1.3 函数原型,4.4.2 函数原型,math.h中几个常用的数学函数,3.1.3 函数原型,4.4.2 函数原型,/例3-3 用库函数求正弦和余弦值#include#include void main()double PI=3.1415926535;double x,y;x=PI/2;y=sin(x);cout sin(x)=y endl;y=cos(x);cout cos(x)=y endl;,3.1.3 函数原型,4.4.2 函数原型,/例3-3 用库函数求正弦和余弦值#include#include void main()double PI=3.1415926535;double x,y;x=PI/2;y=sin(x);cout sin(x)=y endl;y=cos(x);cout cos(x)=y endl;,包含头文件,3.1.3 函数原型,4.4.2 函数原型,/例3-3 用库函数求正弦和余弦值#include#include void main()double PI=3.1415926535;double x,y;x=PI/2;y=sin(x);cout sin(x)=y endl;y=cos(x);cout cos(x)=y endl;,调用库函数,3.1.3 函数原型,C+有三种参数传递机制:值传递指针传递引用传递,4.2 函数参数的传递,3.2 函数参数的传递,4.2.1传值参数,调用函数时,实参表达式的值被复制到相应形参标识的对象中,并按形参类型强制转换 函数内对形参的访问、修改,都在形参的标识对象进行 函数返回时,形参对象被撤消,不影响实参的值 值传送的实参可以是常量、有确定值的变量或表达式 函数返回值通过匿名对象传递,3.2.1 传值参数,1值传递机制,/例3-4 强制类型转换#include void main()float add1(float,float);/函数原型 float add2(int,int);/函数原型 float a,b,c;cin a b;c=add1(a,b);cout c1=c endl;c=add2(1/a,1/b);cout c2=c endl;float add1(float x,float y)return(x+y);float add2(int i,int j)return(i+j);,3.2.1 传值参数,/例3-4 强制类型转换#include void main()float add1(float,float);/函数原型 float add2(int,int);/函数原型 float a,b,c;cin a b;c=add1(a,b);cout c1=c endl;c=add2(1/a,1/b);cout c2=c endl;float add1(float x,float y)return(x+y);float add2(int i,int j)return(i+j);,1值传递机制,3.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,int a,b,c;,/例3-5 值参传递,1值传递机制,3.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,cin a b;,/例3-5 值参传递,1值传递机制,3.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,c=add(a,b);,/例3-5 值参传递,1值传递机制,3.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,int add(int i,int j),/例3-5 值参传递,1值传递机制,3.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,2,4,i+;j+;,/例3-5 值参传递,1值传递机制,3.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,i,j,2,4,return(i+j);,/例3-5 值参传递,3+5,1值传递机制,3.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,i,j,2,4,return(i+j);,/例3-5 值参传递,1值传递机制,3.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,i,j,8,2,4,c=add(a,b);,/例3-5 值参传递,1值传递机制,3.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,8,c=add(a,b);,/例3-5 值参传递,1值传递机制,3.2.1 传值参数,#includeint add(int,int);void main()int a,b,c;cin a b;c=add(a,b);cout c=c endl;int add(int i,int j)i+;j+;return(i+j);,8,输出,c=8,cout c=c endl;,/例3-5 值参传递,1值传递机制,3.2.1 传值参数,2实际参数求值的副作用,C+没有规定在函数调用时实际参数的求值顺序 若实际参数表达式之间有求值关联,同一个程序在不同编译器可能 产生不同的运行结果,3.2.1 传值参数,2实际参数求值的副作用,#include int add(int x,int y)return x+y;void main()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,从右向左计算实参表,x+y,3.2.1 传值参数,2实际参数求值的副作用,从右向左计算实参表,5,6,10,+x,5,#include int add(int x,int y)return x+y;void main()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,3.2.1 传值参数,2实际参数求值的副作用,#include int add(int x,int y)return x+y;void main()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,从右向左计算实参表,5,x,y,10,5+10,3.2.1 传值参数,2实际参数求值的副作用,#include int add(int x,int y)return x+y;void main()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,从右向左计算实参表,5,x,y,10,5+10,3.2.1 传值参数,2实际参数求值的副作用,#include int add(int x,int y)return x+y;void main()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,从右向左计算实参表,5,x,y,10,15,3.2.1 传值参数,2实际参数求值的副作用,#include int add(int x,int y)return x+y;void main()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,15,x,y,z,3.2.1 传值参数,2实际参数求值的副作用,#include int add(int x,int y)return x+y;void main()int x=4,y=6;int z=add(+x,x+y);cout 5+11=z?!n;,修改程序,+x;int z=add(x,x+y);cout 5+11=z n;,3.2.1 传值参数,3默认参数,C+允许指定传值参数的默认值。当函数调用中省略默认参数时,默认值自动传递给被调用函数 默认参数在函数原型定义 默认参数放在一般参数之后,3.2.1 传值参数,/例3-7 使用默认参数#include double power(double real,int n=2);void main()double r=3.0;cout power(r)endl;cout power(r,3)endl;double power(double real,int n)if(n=0)return 1.0;double result=real;for(int i=2;i=n;i+)result*=real;return result;,3.2.1 传值参数,/例3-7 使用默认参数#include double power(double real,int n=2);void main()double r=3.0;cout power(r)endl;cout power(r,3)endl;double power(double real,int n)if(n=0)return 1.0;double result=real;for(int i=2;i=n;i+)result*=real;return result;,定义默认参数,3.2.1 传值参数,/例3-7 使用默认参数#include double power(double real,int n=2);void main()double r=3.0;cout power(r)endl;cout power(r,3)endl;double power(double real,int n)if(n=0)return 1.0;double result=real;for(int i=2;i=n;i+)result*=real;return result;,使用默认参数power(r,2),3.2.1 传值参数,/例3-7 使用默认参数#include double power(double real,int n=2);void main()double r=3.0;cout power(r)endl;cout power(r,3)endl;double power(double real,int n)if(n=0)return 1.0;double result=real;for(int i=2;i=n;i+)result*=real;return result;,不使用默认参数,3.2.1 传值参数,int f();void delay(int k,int time=f();,void ferror1(int x,int y=1,int z);,void ferror2(int x,int y=0);void ferror2(int x);ferror2(3);/调用哪个函数?,Error!,3默认参数,3.2.1 传值参数,4.3 函数调用机制,函数之间的关系,C+程序从主函数开始执行 主函数由操作系统调用,主函数可以调用其它函数 其它函数可以互相调用,但不能调用主函数 所有函数是平行的,不能嵌套定义,4.3 函数调用机制,函数之间的关系,主函数调用其它函数,其它函数互相调用,函数递归调用,4.3.1嵌套调用,main(),调用fa(),堆 栈,fa(),调用fb(),fb(),操作系统运行状态,返回地址,main()的参数,main()运行状态,返回地址,fa()的参数,fa()运行状态,返回地址,fb()的参数,3.3.1 嵌套调用,4.3.1嵌套调用,main(),调用fa(),结束,fa(),调用fb(),fb(),操作系统运行状态,返回地址,main()的参数,main()运行状态,返回地址,fa()的参数,fa()运行状态,返回地址,fb()的参数,堆 栈,3.3.1 嵌套调用,/例3-14 函数嵌套调用示例#includelong fact(int m)int i;long sum=1;for(i=1;i a b;f1=fact(a)/(fact(b)*fact(a-b);cout first:bin(a,b)=f1 endl;f2=bin(a,b);cout second:bin(a,b)=f2 endl;,3.3.1 嵌套调用,/例3-14 函数嵌套调用示例#includelong fact(int m)int i;long sum=1;for(i=1;i a b;f1=fact(a)/(fact(b)*fact(a-b);cout first:bin(a,b)=f1 endl;f2=bin(a,b);cout second:bin(a,b)=f2 endl;,3.3.1 嵌套调用,/例3-14 函数嵌套调用示例#includelong fact(int m)int i;long sum=1;for(i=1;i a b;f1=fact(a)/(fact(b)*fact(a-b);cout first:bin(a,b)=f1 endl;f2=bin(a,b);cout second:bin(a,b)=f2 endl;,3.3.1 嵌套调用,/例3-14 函数嵌套调用示例#includelong fact(int m)int i;long sum=1;for(i=1;i a b;f1=fact(a)/(fact(b)*fact(a-b);cout first:bin(a,b)=f1 endl;f2=bin(a,b);cout second:bin(a,b)=f2 endl;,3.3.1 嵌套调用,4.3.2递归调用,递归函数要求,递归形式(算法)递归条件(缩小问题规模)递归终止条件(基本情况),递归结构是更强的循环结构 所有的循环结构都可以写成递归结构,反之不一定行,递归函数 函数直接或间接调用自己,3.3.2 递归调用,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,例3-15 求阶乘,3.3.2 递归调用,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,递归形式,3.3.2 递归调用,例3-15 求阶乘,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,递归终止条件基本情况,3.3.2 递归调用,例3-15 求阶乘,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,修改递归条件,3.3.2 递归调用,例3-15 求阶乘,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,k,3,F(3),n,3,F(3),3*F(2),n,2,F(2),2*F(1),n,1,F(0),1,计算 Factorial(3)=3!,F(1),n,0,1*F(0),3.3.2 递归调用,例3-15 求阶乘,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,k,3,F(3),n,3,F(3),3*F(2),n,2,F(2),2*F(1),n,1,F(0),1,计算 Factorial(3)=3!,F(1),n,0,1*F(0),1,3.3.2 递归调用,例3-15 求阶乘,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,k,3,F(3),n,3,F(3),3*F(2),n,2,F(2),2*F(1),n,1,计算 Factorial(3)=3!,F(1),3.3.2 递归调用,例3-15 求阶乘,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,k,3,F(3),n,3,F(3),3*F(2),n,2,F(2),2*F(1),n,1,计算 Factorial(3)=3!,F(1),F(1)=1,1,3.3.2 递归调用,例3-15 求阶乘,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,k,3,F(3),n,3,F(3),3*F(2),n,2,F(2),计算 Factorial(3)=3!,F(2)=2,2,3.3.2 递归调用,例3-15 求阶乘,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,k,3,F(3),n,3,F(3),计算 Factorial(3)=3!,3.3.2 递归调用,例3-15 求阶乘,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,k,3,F(3),n,3,F(3),计算 Factorial(3)=3!,F(3)=6,3.3.2 递归调用,例3-15 求阶乘,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,k,3,F(3),计算 Factorial(3)=3!,3.3.2 递归调用,例3-15 求阶乘,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,k,3,F(3),计算 Factorial(3)=3!,3!=6,3.3.2 递归调用,例3-15 求阶乘,int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,计算 Factorial(3)=3!,3.3.2 递归调用,例3-15 求阶乘,例3-15 求阶乘#includeint Factorial(int);void main()int k;cout k;cout k!=Factorial(k)endl;int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,非递归调用,3.3.2 递归调用,例3-15 求阶乘#includeint Factorial(int);void main()int k;cout k;cout k!=Factorial(k)endl;int Factorial(int n)if(n=0)return 1;else return n*Factorial(n-1);,递归调用,3.3.2 递归调用,4.5 内置函数和重载函数,内置函数是C+为降低小程序调用开销的一种机制 函数重载是以同一个名字命名多个函数实现版本,4.5.1内置函数,内置函数作用 减少频繁调用小子程序的运行的时间开销,内置函数机制 编译器在编译时,将内联函数的调用以相应代码代替,内置函数声明inline 函数名,注:内置函数仅在函数原型作一次声明,当然在声明函数和定义函数时 同时写inline也可以。适用于只有1 5行的小函数 不能含有复杂结构控制语句,不能递归调用,3.5.1 内联函数,4.5.1内置函数,例:,