#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,如果条件发生故障,它将不会再次调用.。
怎么会发生这种事?
发布于 2014-09-29 20:47:49
三个main的输出如下:
main #1: 2 4
main #2: 3 4
main #3 4 4顺便说一句,printf("%d,a");应该是printf("%d",a);
为了说明这一点,请尝试
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;
}输出:
1:2 2:3 3:4 3:4 2:4 1:4发布于 2014-09-29 20:49:21
就像这样:
- 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发布于 2014-09-29 20:53:02
每次main()的运行都是在递归调用之后输出a的值来完成的。该函数将运行三次;第一次运行将输出2,然后是递归,然后是输出4。在此期间,另一次调用将输出3,然后是递归,然后输出4。在此期间,花药调用将输出4,然后输出而不是 recurse,然后输出4。
我所见过的唯一这样的代码是在完全人工的编码测试中,在那里,你被要求决定一些荒谬的东西的输出。这就是它产生的原因吗?不要把时间浪费在这样的事情上:任何人都不应该写这样的代码,并且能够计算出它的行为不是编程能力的一个很好的指标。
https://stackoverflow.com/questions/26108561
复制相似问题