带递归函数的静态变量示例
#include <stdio.h>
int main()
{
static int i=10;
if(--i)
{
main(); /*recursive call main */
printf("%d ", ++i); /* print returned value of main */
}
}
答案 0 :(得分:1)
static
变量初始化一次。它的生命周期就是程序。由于变量初始化一次,因此初始值为10。
在每次递归调用中,它将递减(在if
语句处),当达到0时,它将不会再进一步。
在最后一次递归之后,它将开始打印并返回。
由于printf
语句在递归之后,它将在最后一次递归后开始首次打印(当i=1
时)并将打印1到9。
执行printf
并返回时,它会使i
增加1.因此,最顶层的函数堆栈将i
设为9。
答案 1 :(得分:1)
当i
不等于零时,函数main调用自身。
if(--i)
{
main(); /*recursive call main */
所以你有一连串的电话
main( i = 10 ) -> main( i = 9 ) ->...-> main( i = 0 )
当i
等于零时,递归停止,每个被调用的main将控件返回到上一次main调用。
上一次调用main只执行此语句
printf("%d ", ++i); /* print returned value of main */
因此输出将是
1 2 3 4 5 6 7 8 9
答案 2 :(得分:0)
++i
与i = i + 1
相同,所以当你写
printd("%d ", ++i);
再次递增i
,使其值保持不变。