-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 に答える