首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法解释程序的输出

无法解释程序的输出
EN

Stack Overflow用户
提问于 2014-09-29 20:45:14
回答 4查看 48关注 0票数 0
代码语言:javascript
复制
#include <stdio.h>
#include <string.h>

void main()
{
  static int a=1;
  ++a;
  printf("%d",a);
  if(a<=3)
      main();
   printf("%d,a");   

}

我不明白为什么交单是: 234444。有人能解释吗?

据我所知,当一个值达到4时,它应该是2344,如果条件发生故障,它将不会再次调用.

怎么会发生这种事?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-29 20:47:49

三个main的输出如下:

代码语言:javascript
复制
main #1: 2         4
main #2:   3     4
main #3      4 4

顺便说一句,printf("%d,a");应该是printf("%d",a)

为了说明这一点,请尝试

代码语言:javascript
复制
int depth = 0;

void main()
{
    ++depth;

    static int a = 1;
    ++a;
    printf("%d:%d ", depth, a);
    if (a <= 3)
        main();
    printf("%d:%d ", depth, a);

    --depth;
}

输出:

代码语言:javascript
复制
1:2 2:3 3:4 3:4 2:4 1:4
票数 2
EN

Stack Overflow用户

发布于 2014-09-29 20:49:21

就像这样:

代码语言:javascript
复制
- main()
- ++a, now == 2
- print 2
  - main()
  - ++a, now == 3
  - print 3
    - main()
    - ++a, now == 4
    - don't call main
    - print 4
    - return
  - print 4
  - return
- print 4
- return
票数 3
EN

Stack Overflow用户

发布于 2014-09-29 20:53:02

每次main()的运行都是在递归调用之后输出a的值来完成的。该函数将运行三次;第一次运行将输出2,然后是递归,然后是输出4。在此期间,另一次调用将输出3,然后是递归,然后输出4。在此期间,花药调用将输出4,然后输出而不是 recurse,然后输出4

我所见过的唯一这样的代码是在完全人工的编码测试中,在那里,你被要求决定一些荒谬的东西的输出。这就是它产生的原因吗?不要把时间浪费在这样的事情上:任何人都不应该写这样的代码,并且能够计算出它的行为不是编程能力的一个很好的指标。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26108561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档