编写一个递归函数,返回数组中的最小元素,其中C是数组,s是大小。这是我的代码。
var stringHtml = '<td>Column 1</td><td>Column 2</td><td></td>';
错误:未定义s。
答案 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中实际创建的任何列表发生堆栈溢出。另一个提出的解决方案是逐个对列表进行逐项处理,并且在具有超过一千个左右值的列表上会失败。