C 有人能解释一下这个程序的输出吗

C 有人能解释一下这个程序的输出吗,c,recursion,function-definition,C,Recursion,Function Definition,带递归函数的静态变量示例 #include <stdio.h> int main() { static int i=10; if(--i) { main(); /*recursive call main */ printf("%d ", ++i); /* print returned value of main */ } } #包括 int m

带递归函数的静态变量示例

 #include <stdio.h>
    int main()
    {
        static int i=10;
        if(--i)
        {
            main(); /*recursive call main */
            printf("%d ", ++i); /* print returned value of main */

        }
    }
#包括
int main()
{
静态积分i=10;
如果(--i)
{
main();/*递归调用main*/
printf(“%d”,++i);/*打印main的返回值*/
}
}

++i
i=i+1
相同,因此当您编写

 #include <stdio.h>
    int main()
    {
        static int i=10;
        if(--i)
        {
            main(); /*recursive call main */
            printf("%d ", ++i); /* print returned value of main */

        }
    }
printd("%d ", ++i);

再次递增
i
,使其值保持不变。

静态
变量初始化一次。它的生命周期是程序的生命周期。由于变量初始化一次,它的初始值为10

 #include <stdio.h>
    int main()
    {
        static int i=10;
        if(--i)
        {
            main(); /*recursive call main */
            printf("%d ", ++i); /* print returned value of main */

        }
    }
在每个递归调用中,它都将被递减(在
if
语句中),当达到0时,它将不再重复

 #include <stdio.h>
    int main()
    {
        static int i=10;
        if(--i)
        {
            main(); /*recursive call main */
            printf("%d ", ++i); /* print returned value of main */

        }
    }
在最后一次递归之后,它将开始打印并返回

 #include <stdio.h>
    int main()
    {
        static int i=10;
        if(--i)
        {
            main(); /*recursive call main */
            printf("%d ", ++i); /* print returned value of main */

        }
    }
由于
printf
语句在递归之后,它将在最后一次递归之后(当
i=1
时)开始第一次打印,并将打印1到9

 #include <stdio.h>
    int main()
    {
        static int i=10;
        if(--i)
        {
            main(); /*recursive call main */
            printf("%d ", ++i); /* print returned value of main */

        }
    }

在执行
printf
并返回时,它将继续将
i
增加1。因此,最顶层的函数堆栈将把
i
作为9。

i
不等于函数主调用本身的零

 #include <stdio.h>
    int main()
    {
        static int i=10;
        if(--i)
        {
            main(); /*recursive call main */
            printf("%d ", ++i); /* print returned value of main */

        }
    }
    if(--i)
    {
        main(); /*recursive call main */
所以你有一连串的电话

 #include <stdio.h>
    int main()
    {
        static int i=10;
        if(--i)
        {
            main(); /*recursive call main */
            printf("%d ", ++i); /* print returned value of main */

        }
    }
main( i = 10 ) -> main( i = 9 ) ->...-> main( i = 0 )
i
等于零时,递归停止,每个被调用的main将控件返回到main的前一个调用

 #include <stdio.h>
    int main()
    {
        static int i=10;
        if(--i)
        {
            main(); /*recursive call main */
            printf("%d ", ++i); /* print returned value of main */

        }
    }
main的上一个调用只是执行这个语句

 #include <stdio.h>
    int main()
    {
        static int i=10;
        if(--i)
        {
            main(); /*recursive call main */
            printf("%d ", ++i); /* print returned value of main */

        }
    }
printf("%d ", ++i); /* print returned value of main */
因此,输出将是

 #include <stdio.h>
    int main()
    {
        static int i=10;
        if(--i)
        {
            main(); /*recursive call main */
            printf("%d ", ++i); /* print returned value of main */

        }
    }
1 2 3 4 5 6 7 8 9

请解释你有什么问题,你期望的结果是什么?实际产量是多少?并且一定要花些时间来完成。
printf(“%d”,+i);/*打印main的返回值*/
这里的注释有误导性。明白了,谢谢,所以被调用的main从最后一个顺序返回到第一个顺序对吗???@SiddharthSidhu Yes at first main被调用,直到i等于0,然后它将控件返回到上一个调用。考虑当我最初等于1的情况。在这种情况下,不会输出任何内容,因为--i等于0,这是main的第一个调用,即没有其他main调用。