递归地查找列表中最小的数字。

2024-10-01 13:36:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我为我的递归函数作业写了一些代码。我想找出列表中最小的数字。为什么这个代码不起作用?例如,当我输入2、-99和110时,程序返回-99,但当我输入2,5、-9时,它返回2。我不明白是什么问题。在

def rcompare(numList):
    end=len(numList)-1
    if(end==-1):
        return 0
    else:
        if (end!=-1):
            swapped=-1
            for i in range(0,end):
                if (numList[i]>numList[i+1]):
                    numList[i],numList[i+1]=numList[i+1],numList[i]
                    swapped=i
            end=swapped
            return numList[0]
numList=input("Please enter some numbers seperated by comma: ").split(",")
numList=[int(i) for i in numList]
print(rcompare(numList))
input()

Tags: 代码in程序列表forinputreturnif
3条回答

约翰希西有正确的密码。你的代码之所以失败,是因为你的代码将当前项与下一项进行比较,如果下一项较小,则交换这些项。这并不能保证最小的项目在列表中是第一位的。当您的代码完成[2,5,-9]时,最终列表是:[2,-9,5]。因此,如果最小值为numList[2]或更高,盲目依赖numList[0]将失败。在

如果您真的只想返回numList[0],那么您需要一个更类似于以下内容的循环:

for i in range(0,end):
    if (numList[0]>numList[i]):
        numList[0],numList[i]=numList[i],numList[0]
        swapped=i
    end=swapped
    return numList[0]

下面是我该怎么做的。在

def lowest(l, low=None):

    if low == None:
        low = l[0]

    if l:
        if l[0] < low:
            low = l[0]
        del l[0]
        return lowest(l, low=low)
    else:
        return low



print lowest([2,-99,110])
print lowest([2,5,-9])

首先,函数不是递归的。在

它不能正常工作的主要原因是它总是返回numList[0]和{}中较小的一个(当您考虑它时,只有循环的第一次迭代才能影响整体结果)。在

如果最小值位于列表的较低位置,则函数将永远不会返回该值。在

相关问题 更多 >