遞迴函式,也即呼叫自身的函式。
c primer plus中有個例子很棒:
/*理解c語言遞迴函式*/
#include
void up_and_down(int);
int main(void)
void up_and_down(int n)
該段**中,up_and_down不斷呼叫自己,輸出如下結果:
相信輸出level1、level2、level3、level4,很好理解,但是為什麼還會輸出level4、level3、level2、level1呢?
原來,在第一次輸出level4之後,函式不再繼續呼叫up_and_down()函式,而是執行return語句,此時第四級呼叫結束,把控制返回給函式的呼叫函式,也就是第**呼叫函式,第**呼叫函式中前乙個執行過的語句是在if語句中進行第四級呼叫,因此,執行其後續的**,也就是語句#2,這將會輸出level3。第**呼叫結束後,第二級呼叫函式開始繼續執行,即輸出了level2,以此類推。
為了加深理解,把語句#1注釋掉,結果如下:
只把#2語句注釋掉,結果如下:
根據之前所述執行過程,這兩個結果很容易解釋,程式不能直接返回到main()中的初始呼叫部分,而是通過遞迴的每一級逐步返回。
C語言函式的遞迴
1.遞迴條件 採用遞迴方法來解決問題,必須符合以下三個條件 1 可以把要解決的問題轉化為乙個新問題,而這個新的問題的解決方法仍與原來的解決方法相同,只是所處理的物件有規律地遞增或遞減。說明 解決問題的方法相同,呼叫函式的引數每次不同 有規律的遞增或遞減 如果沒有規律也就不能適用遞迴呼叫。2 可以應用...
c語言函式 遞迴
函式的遞迴可以簡單的理解為迴圈,但他和迴圈是不一樣的。函式的一次遞迴呼叫相當於一次迴圈。一般情況下,迴圈要比遞迴計算的時間要快一些 函式的遞迴是在函式內呼叫自己,滿足限制條件後,就會返回到上乙個函式,知道返回到最初的函式 遞迴的呼叫條件 1 限制條件 滿足這個條件,遞迴將不再進行。2 每次的遞迴呼叫...
c語言 返回指標的函式
1 返回本地變數的位址是危險的,一旦離開這個函式本地變數就不存在了 實驗 int f void 產生這種結果的原因 本地變數在函式結束後,雖然值還存在記憶體中,但是不再受保護會,被之後的變數覆蓋掉。2 返回全域性變數或靜態本地變數的位址是安全的 3 返回在函式內malloc的記憶體是安全的,但是容易...