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调用。