雖然學習不同的算法(如合併排序,快速排序或樹遍歷),但我觀察到有兩個遞歸調用緊跟在一起。合併中的遞歸排序,快速排序和樹遍歷
我無法完全理解。請簡單地解釋爲什麼我們使用兩個遞歸調用?這是什麼樣的模式?
也有任何算法,其中有超過兩個立即遞歸調用?
歸併排序
m_sort(數字,溫度,左,中); (數字,temp,mid + 1,right);
樹遍歷
預購(node.left)
預購(node.right)
雖然學習不同的算法(如合併排序,快速排序或樹遍歷),但我觀察到有兩個遞歸調用緊跟在一起。合併中的遞歸排序,快速排序和樹遍歷
我無法完全理解。請簡單地解釋爲什麼我們使用兩個遞歸調用?這是什麼樣的模式?
也有任何算法,其中有超過兩個立即遞歸調用?
歸併排序
m_sort(數字,溫度,左,中); (數字,temp,mid + 1,right);
樹遍歷
預購(node.left)
預購(node.right)
有兩個遞歸調用,因爲同樣的功能需要在兩個不同的地方進行。在從根開始的樹遍歷的情況下,您想要遞歸地沿着左邊,然後向右下。函數調用的方式工作,F
調用preorder(node.left)
並且對preorder(node.right)
一無所知。當它進入node.left
它現在在B
。直到最後的A
,一直進行相同的遞歸調用。當預訂(node.left)從A
然後返回時,B
中的代碼調用preorder(node.right)
並且遞歸將繼續。
這不是一個模式,因爲在許多二進制結構上執行遞歸工作的本質,其中分而治之策略適用於將工作分成更小的部分,然後對每個部分執行遞歸seperately直到瑣碎情況下被滿足(例如,沒有子女作爲A
的節點,當它返回)
來源: 「Sorted binary tree preorder」 由Sorted_binary_tree.svg:Miles衍生物工作:Pluke(talk) - Sorted_binary_tree.svg。經由Wikimedia Commons在公共領域授權。