1. 程式人生 > >雙遞迴(兩個遞迴深入點)函式的執行順序——分組問題為例

雙遞迴(兩個遞迴深入點)函式的執行順序——分組問題為例

  1. 程式從首先左端的遞迴深入點進入,再次呼叫函式(4, 3),再次從左側深入點(3, 3)深入。此時得到第一個遞迴的終止條件:n = k,組合數為1,將1返回給父級節點;在此之前,(4, 3)右端的函式深入點並未執行,而是作為沒有執行完畢的函式被儲存在棧中。此時則是執行(4, 3)右側遞迴深入點(3, 2)函式。剩餘執行過程由紅色箭頭標識,不再一一說明。
  2. 無論執行左側還是右側函式,呼叫時必定先執行左子樹所代表的函式。若此時這棵左子樹依然存在後代,則先執行它的左子樹函式,然後迴圈此邏輯;直到左子樹沒有下級節點時,那麼就返回它的上級節點,來執行上級節點的右子樹函式。
  3. 使用二叉樹表示的雙遞迴函式執行過程中,任何一個節點若存在子節點,那麼它的左後代與右後代必然是同時存在的。原因就在於在遞迴呼叫函式時,兩個呼叫自身的函式也是同時存在的。
  4. 當一個節點找到遞迴出口時,那麼與它有相同父級節點的兄弟節點不會停止遞迴深入,直到得到一個可以返回的值為止(即找到遞迴出口)。所以,葉子結點返回值逐級累加,所有的返回值之和,就是題目所求結果,也就是整個遞迴最外層函式的返回值即函式呼叫者(此題為main函式)所需要的結果。
  5. 可以使用斷點除錯對變數進行監視,從而更好地理解雙深入點遞迴函式的執行過程。