靜態變量例如誰能解釋這個程序的輸出與遞歸函數
#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)。 –