虽然学习了不同的算法(如合并排序,快速排序或树遍历),但我发现有两个递归调用紧跟在一起。
我无法完全理解。请用简单的术语解释为什么我们使用两个递归调用?这有什么样的模式吗?
还有哪些算法可以进行两次以上的立即递归调用?
合并排序
m_sort(数字,临时,左,中);
m_sort(数字,临时,中间+ 1,右);
树遍历
预订(node.left)
序(node.right)
答案 0 :(得分:1)
有两个递归调用,因为需要在两个不同的地方执行相同的功能。在从根开始的树遍历的情况下,您希望递归地向左下行,然后向右下行。函数调用的方式,F
调用preorder(node.left)
并且对preorder(node.right)
一无所知。当它进入node.left
时,它现在位于B
。同样的递归调用将一直进行到A
的底部。当preorder(node.left)从A
返回时,B
中的代码会调用preorder(node.right)
,递归将继续。
这不是一种模式,而是在许多二元结构上进行递归工作的本质,其中分而治之的策略适用于将工作分成更小的部分,然后分别对每个部分执行递归直到满足琐碎的情况(例如A
中没有子节点的节点,当它返回时)
来源:“Sorted binary tree preorder”按Sorted_binary_tree.svg:Miles衍生作品:Pluke(talk) - Sorted_binary_tree.svg。通过Wikimedia Commons在公共域下获得许可。