2015-02-07 139 views
0

雖然學習不同的算法(如合併排序,快速排序或樹遍歷),但我觀察到有兩個遞歸調用緊跟在一起。合併中的遞歸排序,快速排序和樹遍歷

我無法完全理解。請簡單地解釋爲什麼我們使用兩個遞歸調用?這是什麼樣的模式?

也有任何算法,其中有超過兩個立即遞歸調用?

歸併排序

m_sort(數字,溫度,左,中); (數字,temp,mid + 1,right);

樹遍歷

預購(node.left)

預購(node.right)

回答

1

有兩個遞歸調用,因爲同樣的功能需要在兩個不同的地方進行。在從根開始的樹遍歷的情況下,您想要遞歸地沿着左邊,然後向右下。函數調用的方式工作,F調用preorder(node.left)並且對preorder(node.right)一無所知。當它進入node.left它現在在B。直到最後的A,一直進行相同的遞歸調用。當預訂(node.left)從A然後返回時,B中的代碼調用preorder(node.right)並且遞歸將繼續。

這不是一個模式,因爲在許多二進制結構上執行遞歸工作的本質,其中分而治之策略適用於將工作分成更小的部分,然後對每個部分執行遞歸seperately直到瑣碎情況下被滿足(例如,沒有子女作爲A的節點,當它返回)

pre-order traversal from wikipedia

來源: 「Sorted binary tree preorder」 由Sorted_binary_tree.svgMiles衍生物工作:Pluketalk) - Sorted_binary_tree.svg。經由Wikimedia Commons在公共領域授權。