具有递归函数的静态变量示例
#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和返回时,它会不断增加i1。因此,最顶层的函数堆栈将变为i9。
++ii = i + 1和你写的时候一样
printd("%d ", ++i);
您再次递增i,使其值保持不变。