<入门>递归疑问!!

lijianbin9 2010-08-18 11:38:16

#include<stdio.h>
void f(void);
void g(void);

int main(void)
{
static int count = 0; //g()每次调用main()的时候 count都是为 0吗?
printf("Hello form main()\n");
if(++count <= 2)
f();
// g(); // 添加上这句之后为什么是无限循环? 我怎么认为这句根本不执行呢?<去掉 注释的时候>
return 0;
}
void f(void)
{
printf("Hello from f()\n");
g();
}
void g(void)
{
printf("Hello from g()\n");
main();
}
...全文
77 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxwlll 2010-08-19
  • 打赏
  • 举报
回复
你count那句用的是if语句,不是for或while语句,所以只初始化了一次!
浅蓝马 2010-08-19
  • 打赏
  • 举报
回复
没有很仔细看,
不过我觉得if(++count <= 2)的判断可能会经过两次,
如果你的那个g()加上的话,是会被运行的,
一旦运行,因为这个函数与main()相互调用,没有可以退出的条件判断,
所以就是进入无限循环。
超出堆栈允许范围的话,就会出错了。
bobo364 2010-08-19
  • 打赏
  • 举报
回复
其实递归就是栈的应用
maoxing63570 2010-08-19
  • 打赏
  • 举报
回复
1.static 只在第一次初始化
2.如果你加上那个注释的话,f()和g()出现互相调用,但是又没有使它们退出互相调用的条件,所以出现无限循环
feichen464574556 2010-08-19
  • 打赏
  • 举报
回复
ls正解
Jesusgospelnj 2010-08-19
  • 打赏
  • 举报
回复
static 只在第一次初始化。以后每次调用不在初始化,使用上次的数值。
lijianbin9 2010-08-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiazaihrl 的回复:]

不是,count只初始化一次

它会把g()内容压栈,尽管看似每到那,事后再出栈

欢迎加入QQ群
26406124
[/Quote]
{它会把g()内容压栈,尽管看似每到那,事后再出栈} 理解有点难..........

那main()中添加g()后 会不会执行阿?
在第二次到main()的时候 count就是2?
xiazaihrl 2010-08-18
  • 打赏
  • 举报
回复
不是,count只初始化一次

它会把g()内容压栈,尽管看似每到那,事后再出栈

欢迎加入QQ群
26406124

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧