如何编写一个返回数组中最小元素的递归函数?

时间:2017-02-12 15:38:53

标签: python recursion

编写一个递归函数,返回数组中的最小元素,其中C是数组,s是大小。这是我的代码。

var stringHtml = '<td>Column 1</td><td>Column 2</td><td></td>';

错误:未定义s。

4 个答案:

答案 0 :(得分:1)

显然计算机不知道行s

print min (c,s)代表什么

您需要告诉计算机您想要s变量。我建议你在函数调用中使用0而不是s,这样你就会开始从0开始寻找最小数。

话虽如此,代码还存在其他问题,但这将解决您的错误,您将能够继续完成任务。

答案 1 :(得分:0)

首先,我要提醒使用min作为函数名称。 Min是一个内置的python,因此使用您自己的函数名可能会导致代码中出现不需要的结果。

如果我正确理解代码和你的问题,似乎你试图获得列表长度的最小值与列表中的最小整数相比。

c = [2,5,6,4,3]
'''The function takes the name of the array as the parameter. In this case c'''
def minimum(array): 
'''This function compares the length of array to the smallest integer in the array'''
    length = 0
    for i in c:
        length += 1
    '''In this case length is 5'''
    smallest = min(c) 
    '''smallest is 2 in this case'''
    print min(smallest,length)

但是,如果您只想获得数组的最小值,只需执行:

def minval(array):
     print min(array)

答案 2 :(得分:0)

递归函数将任务划分为可由函数本身解决的较小部分。使用这些越来越小的任务重复调用该函数,直到任务变得如此简单,以便可以轻松地计算它们。

因此列表的最小元素(递归计算时)是第一个元素的最小值和列表其余部分的最小元素。当只有一个元素时,任务变得微不足道。在Python3中:

def smallest(lst):
   """recursive for learning, not efficient"""
   first, *rest = lst
   return first if not rest else min(first, smallest(rest))

答案 3 :(得分:0)

我同意其他人的意见,你应该避免使用min作为函数名,这样你就不会与python的内置实现发生冲突。我也假设您不应该使用min,因为否则解决方案是微不足道的。

这是一个不需要第二个参数的递归实现,因为列表的长度可以通过len函数确定。

def smallest(lst):
    l = len(lst)
    if l > 1:
        mid = l // 2
        m1 = smallest(lst[:mid])
        m2 = smallest(lst[mid:])
        return m1 if m1 < m2 else m2
    return lst[0]

这将检查参数列表是否包含2个或更多值。如果是这样,它将列表分成两半,确定每一半中的最小值,然后返回较小的结果。如果只有一个元素,它通常是最小的元素并返回。

将每个递归调用的列表减半会将调用堆栈的深度限制为O(log n),其中n是原始列表的长度。这可以防止在Python中实际创建的任何列表发生堆栈溢出。另一个提出的解决方案是逐个对列表进行逐项处理,并且在具有超过一千个左右值的列表上会失败。