zoukankan      html  css  js  c++  java
  • 特殊函数

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

    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;
    }
  • 相关阅读:
    C# 根据Word模版生成Word文件
    C# 添加事件
    类HTML语法显示格式化文本
    简易内存池实现
    12306订票助手
    网站前端的收藏
    摘抄 ander图片上传
    对于文件上传的几种处理方法,转载的
    对于 asp.net 中IhttpHandle,和IHttpModel中使用Session 会话
    KindEdit 的编辑插件的提问家
  • 原文地址:https://www.cnblogs.com/xixixing/p/10156119.html
Copyright © 2011-2022 走看看