【发布时间】:2021-05-14 11:41:44
【问题描述】:
我正在学习使用 C 的数据结构和算法,但我不知道如何递归地解决这个问题。
它有简单的迭代解决方案,但我需要一些递归版本的帮助。
这是我的递归版本:
void delAllOcc(node** headRef,int key) {
node * prev;
if (*headRef != NULL && (*headRef)->data == key) {
prev = *headRef;
*headRef = (*headRef)->next;
free(prev);
}
else {
if (*headRef != NULL) {
delAllOcc(&(*headRef)->next,key);
}
}
}
【问题讨论】:
-
请注意,递归解决这个问题是一个非常糟糕的主意,因为它的效率较低,而且对于很长的列表,您可能会遇到堆栈溢出
-
该代码是 recursive 而不是 iterative - 您声明它是您的 iterative 版本。碰巧的是,您对递归解决方案的诚实尝试对任何回答的人都更有用,您的工作迭代解决方案几乎没有什么相关性。递归是计算机科学课程钟爱的“巧妙技巧”——在现实世界中最好避免使用,因为真正的计算机具有有限的堆栈。在这种情况下,您的列表长度很容易超过最大调用堆栈深度。学习它,通过你的课程,然后知道要谨慎使用,当然不要在这种不受约束的情况下使用。
-
是的,我应该提到这是我的递归尝试,我写错了,我的错。感谢您的解释,非常感谢。
标签: c recursion linked-list singly-linked-list function-definition