【发布时间】:2016-02-29 22:49:19
【问题描述】:
我有两个版本的相同算法,它们递归地找到链表中的最小元素。一种算法首先检查是否已到达列表的末尾,如果已到达,则返回该元素,然后检查当前元素(列表的头部)是否小于递归调用的当前最小值。如果当前元素更大,则返回当前最小值(通过递归调用找到)。
另一种算法的作用只是略有不同,在检查基本情况之后,它将递归调用存储在一个临时变量中,然后使用 temp 与当前列表元素进行比较。
我发现第一种方法的重复是:
T(n) = 1T(n-1) + O(1)
(我不太确定)
我想不通的是,第二种算法的重复出现有什么不同,因为它们似乎在做同样的事情。存储在 temp 变量中的递归调用是否会为递归增加额外的工作?
两种算法的伪代码如下:
第一种方法
function min_list_1(L) // L is a non-empty list of numbers
if has_only_one_element(L): return L.head
if L.head < min_list_1(L.next): return L.head
else:
return min_list_1(L.next)
第二种方法
function min_list_2(L) // L is a non-empty list of numbers
if has_only_one_element(L): return L.head
temp = min_list_2(L.next)
if L.head < temp: return L.head
else:
return temp
【问题讨论】:
标签: algorithm recursion recurrence