【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
/***********************************************************************/
解析:
我们知道递归操作即是把【函数的參数以及局部变量】先依次入栈再依次从底出栈。
【记住:可不是全局和静态的变量啊,全局和静态的变量是共享的啊】
代码分析: