我知道这个主题已经有人提出了问题,但是没有一个答案能帮到我。我不需要帮忙实现代码,我只需要帮忙理清这个递归过程。
我最初想的是每个级别递归返回一个元组并比较以找到第二小的值。但这行不通,因为我希望我的函数最终只返回一个值——第二小的值。
我该如何处理这个问题的递归过程呢?谢谢!
编辑:很抱歉没有包含足够的细节,下面是更多说明。
函数应按以下方式工作:
>>> sm([1,3,2,1,3,2])
>>> 2
第二次编辑: 抱歉耽搁了,一直很忙,现在终于能坐下来将我想到的东西编成代码了。它按照我的意愿工作,但老实说,我认为这是一种非常糟糕和低效的递归方式,正如你可能看出来的,我对这个概念还很陌生。
用下面的伪代码重新表述我的原始问题:是否可能做到像我在这里所做的那样,但不用再套一层函数呢?也就是说,是否可能有一个只递归调用自己并返回第二小的数字的函数?
def second_smallest(list):
def sm(list):
if base case(len of list == 2):
return ordered list [2nd smallest, smallest]
else:
*recursive call here*
compare list[0] with returned ordered list
eg: [3, [5,2]]
re-arrange, and return a new ordered list
[3,2]
return sm(list)[0]