具有递归函数的静态变量示例
#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 */
}
}
虽然i
不等于零,但函数 main 调用自身。
if(--i)
{
main(); /*recursive call main */
所以你有一连串的电话
main( i = 10 ) -> main( i = 9 ) ->...-> main( i = 0 )
当i
等于 0 时,递归停止,每个被调用的 main 将控制权返回给前一个 main 调用。
之前的main调用只是执行了这条语句
printf("%d ", ++i); /* print returned value of main */
因此输出将是
1 2 3 4 5 6 7 8 9
static
变量被初始化一次。它的生命周期是程序的。由于变量被初始化一次,它的初始值为 10。
在每次递归调用中,它都会递减(atif
语句),当达到 0 时,它不会进一步递归。
在最后一次递归之后,它将开始打印并返回。
由于printf
语句在递归之后,它将在最后一次递归之后(何时i=1
)开始第一次打印,并将打印 1 到 9。
在执行printf
和返回时,它会不断增加i
1。因此,最顶层的函数堆栈将变为i
9。
++i
i = i + 1
和你写的时候一样
printd("%d ", ++i);
您再次递增i
,使其值保持不变。