-4

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

3 回答 3

2

Firstly, the function isn't recursive.

The main reason it doesn't work correctly is that it always returns the smaller of numList[0] and numList[1] (when you think about it, only the first iteration of your loop can affect the overall outcome).

If the smallest value is located further down the list, your function will never return it.

于 2012-12-21T15:21:15.053 回答
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])
于 2012-12-21T15:35:47.837 回答
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]
于 2012-12-21T15:41:37.120 回答