2017-04-17 56 views
2

静态变量例如谁能解释这个程序的输出与递归函数

#include <stdio.h> 
    int main() 
    { 
     static int i=10; 
     if(--i) 
     { 
      main(); /*recursive call main */ 
      printf("%d ", ++i); /* print returned value of main */ 

     } 
    } 
+0

请解释一下你有什么问题,就是输出你的预期是什么?实际产出是多少?并且花一些时间[阅读如何提出好问题](http://stackoverflow.com/help/how-to-ask)。 –

回答

0

++i相同i = i + 1所以,当你写

printd("%d ", ++i); 

再次增加i因此其价值保持不变。

1

static变量初始化一次。它的一生就是这个计划。因为变量初始化一次,所以它的初始值为10.

在每次递归调用中,它将递减(在if语句处),并且当它达到0时,它不会再发生。

上次递归后,它将开始打印并返回。

printf作为语句是递归后,将最后的递归之后开始第一打印(当i=1)和将打印1至9

在执行printf并返回时,将保持由一种提高i因此,最上面的函数堆栈将得到i as 9.

1

虽然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 
+0

我很确定它会打印出'1 2 3 4 5 6 7 8 9'... –

+0

https://ideone.com/vzZhOl –

+0

@AlexLop。谢谢。你是对的。 –