• 递归


    【1】

    #include "stdio.h"
    #include "windows.h"
     
    /*
    递归调用运行过程:
    递归函数调用之前代码(函数的调入):
         每次进入都会运行一遍(调用函数后面的都不运行),直到不满足某个条件而退出。

    递归函数调用之后代码(函数的返回): 每次退出时运行一遍(调用函数前面的都不再运行)。 传入的參数即局部变量(调用前对參数的訪问顺序如54321)。将所有存在栈中 最后返回时就像出队的过程(先入先出如12345) */ #include "stdio.h" int g_num; void up_down(int n) { printf("call-n=%d: n-addr=0x%x ",n,&n); if (n <g_num) { up_down(n+1); } printf("return-n=%d: n-addr=0x%x ",n,&n); } /* 注意函数參数是存在栈中的; 首先入栈操作: n=1先入栈 n=2再入栈 n=3再入栈 当n=3时候不满足条件了接着函数进行出栈操作: 依次打印3, 2, 1 结果: call-n=1: n-addr=0x18fef8 call-n=2: n-addr=0x18fea0 call-n=3: n-addr=0x18fe48 return-n=3: n-addr=0x18fe48 return-n=2: n-addr=0x18fea0 return-n=1: n-addr=0x18fef8 */ int main() { g_num = 3; up_down(1); return 0; }





     

    ------------------------------------------------------------------------------------------------------------------------------

     

    【2】???

    #include<stdio.h>
    void e(int );
     main()
     {
         inta; 
         a=3; 
         e(a);
    }
     
     void e(int n)
     {
      if(n>0) 
      { 
       e(--n);
      printf("%d
    ",n);
       e(--n);
     }
     }

    局部变量n入栈

    n=3     e(2)

    n=2     e(1)

    n=1     e(0)    

    n=0     不运行了。接着出栈操作

    局部变量n出栈

    n=1     e(0)   打印0  n=-1不运行

    n=2     e(1)   打印1  n=0不运行···

    n=3     e(2)   打印2  n=1打印0

     

     

     

     

     

    【3】浅析全局变量和局部变量

    代码:

    /***********************************************************************/

    #include<stdio.h>
     
    int m3 = 1;
     
    int fun( int m4)
    {
     
         int m1 = 1;
         static int m2 = 1;
         m1++;
         m2++;
         m3++;
     
         if(m4 <= 0)
         {
     
             printf("m1=%d m2=%d m3=%d m4=%d 
    ",m1, m2, m3,m4);
                  return 5;
         }
         else
             return  m4 + fun(m4 -1);
    }
     
     
    int main()
    {
        int m5 = fun(5);
         printf("%d
    ",m5);
     
    }

    结果:

    m1=2 m2=7    m3=4      m4=0

    20


    /***********************************************************************/

    解析:

    我们知道递归操作即是把【函数的參数以及局部变量】先依次入栈再依次从底出栈。

    【记住:可不是全局和静态的变量啊,全局和静态的变量是共享的啊】

    代码分析:



  • 相关阅读:
    整理一下看过的图像识别的文章(人脸、车牌、验证码)
    从大象安全套到超级表格
    HDU 3157 Crazy Circuits(有源汇上下界最小流)
    struts2学习笔记(5)---自己定义拦截器
    【分享】4412开发板-嵌入式Linux开发须要掌握的基础知识和技能
    ConvertHelper与泛型集合
    G711
    关于众筹的一些经验,希望能有帮助
    Java基础 Day14 泛型
    LeetCode144:Binary Tree Preorder Traversal
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/7017500.html
Copyright © 2020-2023  润新知