理解C語言遞迴函式的逐級返回(return)
阿新 • • 發佈:2019-01-24
遞迴函式,也即呼叫自身的函式。
C Primer Plus中有個例子很棒:
/*理解C語言遞迴函式*/
#include<stdio.h>
void up_and_down(int);
int main(void)
{
up_and_down(1);
return 0;
}
void up_and_down(int n)
{
printf("level %d: n loacation %p\n", n, &n);/*1*/
if (n < 4)
up_and_down(n + 1);
printf("level %d: n loacation %p\n", n, &n);/*2*/
}
該段程式碼中,up_and_down不斷呼叫自己,輸出如下結果:
相信輸出level1、level2、level3、level4,很好理解,但是為什麼還會輸出level4、level3、level2、level1呢?
原來,在第一次輸出level4之後,函式不再繼續呼叫up_and_down()函式,而是執行return語句,此時第四級呼叫結束,把控制返回給函式的呼叫函式,也就是第三級呼叫函式,第三級呼叫函式中前一個執行過的語句是在if語句中進行第四級呼叫,因此,執行其後續的程式碼,也就是語句#2,這將會輸出level3。第三級呼叫結束後,第二級呼叫函式開始繼續執行,即輸出了level2,以此類推。
為了加深理解,把語句#1註釋掉,結果如下:
只把#2語句註釋掉,結果如下:
根據之前所述執行過程,這兩個結果很容易解釋,程式不能直接返回到main()中的初始呼叫部分,而是通過遞迴的每一級逐步返回。