特殊函数

带默认形参值的函数、重载函数、内联函数、递归函数

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;
}

 

posted @ 2018-12-21 15:41  夕西行  阅读(597)  评论(0编辑  收藏  举报