递归函数与全局变量、局部变量

   日期:2020-11-13     浏览:154    评论:0    
核心提示:先看两个简单的程序,看它们的运行结果程序1#include <stdio.h>void f(){ char x; scanf("%c",&x); if(x=='*'){ printf("%c",x); } else{ f(); printf("%c",x); } return;}int main(){ f(); return 0;}输入样例abc*输出样例*cba程序2#include <stdio.h>char

先看两个简单的程序,看它们的运行结果

程序1

#include <stdio.h>
void f()
{ 
	char x;
	scanf("%c",&x);
	if(x=='*'){ 
		printf("%c",x);
	}
	else{ 
		f();
		printf("%c",x);
	}
	return;
}
int main()
{ 
	f();
	return 0;
}

输入样例

abc*

输出样例

*cba

程序2

#include <stdio.h>
char x;
void f()
{ 
	scanf("%c",&x);
	if(x=='*'){ 
		printf("%c",x);
	}
	else{ 
		f();
		printf("%c",x);
	}
	return;
}
int main()
{ 
	f();
	return 0;
}

输入样例

abc*

输出样例

****

由上面两个程序可以看出,它们定义的变量是不一样的,第一个函数的变量x是局部变量,而第二个程序的变量x是全局变量,这就导致了它们的输出结果不一样。

分析程序1

上面是进入函数f( )后的运行过程,刚开始输入x=a,if为假,再次调用f( )函数,再次输入x=b,以此类推下去,到最后if为真时,输出x= *,再返回输出x=c,以此类推下去,最后的到的结果是 *cba。

而由于变量x是局部变量,存放在内存的栈区,属于动态存储类别, 占动态存储区空间,函数调用结束后自动释放。
如:看上面的流程图1,当第⑤执行后,则第四个框内的数据都会被系统回收,x的值就看第三个框,变为c,以此下去,直到结束。所以最后的结果并不会跟程序2的结果一样输出****。

分析程序2

程序2中的自定义函数f( )与程序1的执行过程差不多,只是变量x变成了全局变量。全局变量存放在内存中的静态区,在该区的数据只有在程序全部执行完之后才会被释放。

看上面的流程图2,x是全局变量,所以x放在了静态区里面,每次激活函数f( )后,输入的x的值会覆盖前一个x的值,当程序执行到第⑤步执行后,x的值并不会像程序1那样被系统回收,它会保留下来,当函数进入第三个框内的时候,输出的x依然是*,以此推下去。因此,程序会输出****。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服