带默认形参值的函数、重载函数、内联函数、递归函数
1、带默认形参值的函数
带默认值的形参必须定义在形参列表的后面。
void fun(int p1,int p2=10); //正确
void fun(int p1=10,int p2); //错误
2、重载函数
形参个数不同,或数据类型不同,那么这两个函数可以重名。
int Max(int x,int y){return((x>y)?x:y);}
double Max(double x,double y){return((x>y)?x:y);}
编译器会根据实参个数、类型,自动调用形参最匹配的那个重载函数。
3、内联函数
“主函数+子函数”的效率会降低,涉及函数跳转和数据传递。
内联函数,将函数代码直接嵌入到调用语句处,不再进行函数跳转和数据传递。
使用方式:子函数前加inline关键字即可。
inline int Max(int x,int y){return((x>y)?x:y);}
注意:
复杂函数不能定义为内联函数。内联函数需是简单的函数,对复杂函数体(如循环)编译器会自动按非内联方式编译。
一般将频繁调用的函数定义为内联函数。
4、递归函数,效率低
直接或间接调用自身的函数称为递归函数。
函数类型 函数名(形参列表){
....
if(递归终结条件)
取得已知结果
else
递归公式,调用自身
....
}
递归法求解N!,由繁到简,称为逆向递推,依次求N!、(N-1)!、(N-2)!、...
#include<iostream> using namespace std; int Factorial(int N) { int result; if(N==1) result=1; //已知结果,1!=1 else result=N*Factorial(N-1); //f(n)=n*f(n-1)递归公式 return result; } int main(){ int x=Factorial(3); //3! cout<<x<<endl; return 0; }
递推法求解N!,由简到繁,逐步逼近,称为正向递推,依次求1!、2!、3!、...,效率高
#include<iostream> using namespace std; int Factorial(int N) { int result=1; for (int i = 1; i <= N; i++) { result = result*i; } return result; } int main() { int x = Factorial(3); //3! cout << x << endl; return 0; }