• 函数


    基本概念

     当一个的主函数太过庞大时,会将主函数按功能进行拆分,根据是否需要向外部提供接口,分为静态函数和普通函数,
    普通的函数是跨文件可见的, 但是如果是静态函数的话他的可见范围会被缩小到本文件可见,外部文件是无法进行调用的。

    static int max (int x, int y) { //函数体 } 
    //静态函数主要功能是可以缩小该函数的可见范围,减少函数重名的概率;
    // 一般静态函数会被定义在头文件中,在需要使用的文件中可以包含该文件即可使用。
    

    递归函数

     如果一个函数内部有自己调用自己的语句,则它是递归函数。
     注意:
     emsp;1.递归函数必须有结束条件,不然会一直调用下去,将栈溢出,栈崩溃,最后导致程序异常退出;
     emsp;2.递归函数包含两个过程,一个是逐层递进,和逐步递归。

    /*倒序打印 */
    void func( int num )
    {     
          if (num > 1)
          {      
    
                func(num-1);   
          }     
          printf("%d
    " , num );      
    } 
    

    注意:
    1.在递归函数使用的过程中,栈空间消耗非常大,递归的层次越多栈空间剩余空间间越少,很容易会把栈空间耗尽 。
    2.在层层递进的过程中问题的规模,应该逐步减小,也就是某个形式参数应该逐步减小,每次递归判断该形式参数是否满足返回条件。

    回调函数

     每个函数都有一个入口地址,但调用此地址时就会调用此函数。函数指针就是用来保存函数的入口地址的,当函数的实现方不方便直接调用某个功能,可将函数的入口地址传递给函数指针,调用此函数指针便可以间接调用原来的函数,这种调用方式称为回调函数。

    bool func_1( int (*p) (int ,int )); 
    int func_2(int a , int b); 
    
    int main(int argc, char const *argv[]) 
    {     
          bool a = func_1(func_2);//func_2是一个函数的地址 
          if (a) 
          { 
                printf("函数调用成功 !! 
    ");  
          }    
          else
          { 
                printf("函数调用失败 !! 
    ");   
          }      
          return 0; 
    } 
    
    bool func_1( int (*p) (int ,int ) )
    {  
          if ( NULL == p )
          {
                // 先判断p是否指向一个NULL       
                return false ;   
          }
             
          printf("我在函数1 !!
    ");    
          int num = p(103 , 229);//通过函数指针P来调用函数func_2   
          printf("num:%d
    " , num);   
          return true ;
    } 
    
    int func_2(int a , int b)
    {   
          return a<b ? a:b ; 
    } 
    

    注意:
    1.传递和接收函数地址时&,*可省略。

    //幂运算
    int exponentiation(int n, int i)
    {
          if(i == 0)
          {
                return 1;
          }
          else
          {
                return exponentiation(n, i-1)*n;
          }
    }
    
    //阶乘
    int Factorial(int n) 
    {
    
          if(n == 1) 
          {
                //使递归结束的条件
                return 1;//1! 等于1
          }
          else
          {
                //使递归进行的条件
                return(Factorial(n-1) * n);//n! = (n-1)! * n;
          }
    }
    
  • 相关阅读:
    Metaclass
    Pydantic
    Alembic
    SQLAlchemy
    django2:路由path语法
    Django 学习笔记之模型高级用法
    Flask拾遗总汇1
    Flask中before_request与after_request使用
    Flask 中字典数据返回(jsonify)
    浅析django的abstract,proxy, managed
  • 原文地址:https://www.cnblogs.com/ding-ding-light/p/14088526.html
Copyright © 2020-2023  润新知