使用 main 函数递归

Recursion using the main function

我需要找到这段代码的输出。我知道这是递归,但我不完全知道这段代码实际上是如何工作的。我认为这将是一个无限代码,但事实并非如此。有人可以解释一下吗?

 #include <stdio.h>
 char *str = "kre";
 void main(void) {
     int i;
     static int j = 3;
     for (i = 0; i < j; i++) {
         printf("%d ", j--);
         main();
     }
     printf("%sn%c ", str, 'i');
 }

I thought that this would be an infinite code but it is not

这不是无限代码,因为您为 j 声明了 static(参见 What does “static” mean in C?):

static int j = 3;

j 的值将在您调用 main 函数时更新。您可以看到程序的输出:

3 2 1 kreni kreni kreni kreni

j的值从3递减到1,然后当j = 0时,你不能访问for循环,因为条件i < j 不被接受,所以 main() 不再被调用。

如果你想要一个无限的代码,你从 j 的声明中删除 static,你的程序将永远不会停止。