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

时间:2012-12-21 15:18:25

标签: python function recursion

我为递归函数写了一些代码作业。我想找到列表中最小的数字。为什么这段代码不起作用?例如,当我输入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()

3 个答案:

答案 0 :(得分:2)

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

它无法正常工作的主要原因是它总是返回numList[0]numList[1]中较小的一个(当你想到它时,只有循环的第一次迭代会影响整体结果) )。

如果最小值位于列表的下方,则您的函数将永远不会返回。

答案 1 :(得分:1)

我将如何做到这一点。

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])

答案 2 :(得分:0)

johnthexiii拥有正确的代码。您失败的原因是因为您的代码将当前项目与下一项目进行比较,并在下一项目较小时交换这些项目。这并不能保证最小的项目在列表中排在第一位。当您的代码完成[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]