gpt4 book ai didi

algorithm - 排序双链表插入中的递归

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:11:51 25 4
gpt4 key购买 nike

我是数据结构和递归概念的新手。我很难理解他为什么以及谁能够在这个概念中使用递归。我在论坛上找到了这段代码,但我无法真正理解它的概念。对于 2 1 3 4 的简单情况,如果有人可以解释迭代步骤,我将不胜感激。

这里是黑客排名的链接: https://www.hackerrank.com/challenges/insert-a-node-into-a-sorted-doubly-linked-list

Node SortedInsert(Node head,int data) {
Node n = new Node();
n.data = data;
if (head == null) {
return n;
}
else if (data <= head.data) {
n.next = head;
head.prev = n;
return n;
}
else {
Node rest = SortedInsert(head.next, data);
head.next = rest;
rest.prev = head;
return head;
}
}

最佳答案

递归:递归意味着函数调用自身。对于需要保存多个状态(通常是大量状态)并以相反顺序检索它们的算法,它用作保存状态信息的简单方法。 (有更专业且不易出现内存问题的替代技术,例如使用 Stack 对象保存程序状态)。

这个例子很差,但是典型的递归介绍。是的,您可以使用递归遍历链表,但绝对没有理由这样做。循环会更合适。这纯粹是为了演示递归是如何工作的。所以,回答你的问题“为什么?”这很简单,您可以学习这个概念并稍后在其他实际有意义的算法中使用它。

当您拥有一棵树而不是链表时,递归很有用,其中每个节点都指向多个其他节点。在那种情况下,您需要保存您的状态(您在哪个节点上,以及您最后调用了哪个子节点),以便您可以遍历其中一个链接节点,然后返回并转到下一个节点。

您还问了“如何”。当一个函数调用自身时,它的所有变量都被保存(在程序堆栈中)并为它自己的下一次迭代创建新的变量。然后,当该调用返回时,它会返回到调用它的位置并加载前一组变量。这与“跳转”或某种循环有很大不同,后者每次都使用相同的变量副本。通过使用递归,每次调用时每个局部变量都有一个新副本。即使示例中的“data”变量也是如此,它永远不会改变(因此效率低下)。

关于algorithm - 排序双链表插入中的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47600363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com