静态变量例如谁能解释这个程序的输出与递归函数
#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
相同i = i + 1
所以,当你写
printd("%d ", ++i);
再次增加i
因此其价值保持不变。
static
变量初始化一次。它的一生就是这个计划。因为变量初始化一次,所以它的初始值为10.
在每次递归调用中,它将递减(在if
语句处),并且当它达到0时,它不会再发生。
上次递归后,它将开始打印并返回。
printf
作为语句是递归后,将最后的递归之后开始第一打印(当i=1
)和将打印1至9
在执行printf
并返回时,将保持由一种提高i
因此,最上面的函数堆栈将得到i
as 9.
虽然i
不等于零,函数main调用自己。
if(--i)
{
main(); /*recursive call main */
所以,你必须调用
main(i = 10) -> main(i = 9) ->...-> main(i = 0)
链当i
等于零,则递归停止和控制的主要以前调用每个称为主的回报。
的主要此时之前的通话只是执行该语句
printf("%d ", ++i); /* print returned value of main */
因此输出将是
1 2 3 4 5 6 7 8 9
我很确定它会打印出'1 2 3 4 5 6 7 8 9'... –
https://ideone.com/vzZhOl –
@AlexLop。谢谢。你是对的。 –
请解释一下你有什么问题,就是输出你的预期是什么?实际产出是多少?并且花一些时间[阅读如何提出好问题](http://stackoverflow.com/help/how-to-ask)。 –