C语言递归控制

时间:2016-11-10 13:24:31

标签: c

该程序是关于函数递归的,需要知道如何控制整个程序

void count(int n)
{
  static int d=1;
  printf("%d",n);
  printf("%d",d);
  d++;
  if(n>1)
    count(n-1);
  printf("%d",d);
}

void main()
{
  count(3);
}

我的预期输出是

3122134

原始输出

312213444  

任何人都可以解释一下额外的两个4是如何添加到输出的吗?

请解释有关此计划的流量控制。

1 个答案:

答案 0 :(得分:3)

在这里你是一张友好的图画,可以帮助你理解为什么会发生这种情况(static不是问题,因为你更新变量static int d,在函数内部执行d++ ): enter image description here

当您在函数内部调用递归时,count(2)会启动,但count(3)不会被破坏,它只是在休眠状态,等待子函数count(2)完成。当发生这种情况时,count(3)醒来并说'哦,最后!我的女儿count(2)已经完成了,现在轮到我完成了#34;。但请记住,在count(2)内,您可以调用count(1) ...