4

私は教科書 Zelle Python Programming から実験室の仕事をしようとしています

質問は、「max()リスト内の最大数を見つけるために再帰関数を作成してテストすることです。最大値は、最初の項目と他のすべての項目の最大値のうち大きい方です。」教科書の問題がよくわかりません。

def Max(list):
    if len(list) <= 1:
        else:
            return list[0]
        else:
            m = Max(list[1:])
            return m if m > list[0] else list[0]

def main():
    list = eval(raw_input(" please enter a list of numbers: "))
    print("the largest number is: ", Max(list))

main()

それとも、数字を含むtxtファイルを開いてから再帰を使用すると思いますか?

再帰はこのように機能すると思います

def function()
> if something:
>>return 0
>else:
>>return function()
4

12 に答える 12

15

再帰がどのように機能するかについてのあなたの理解は問題ないようです。

あなたのifブロックが台無しになっています.2else対1ifで、アライメントが外れています. 最初のレベルを削除して、 1 レベルelse以下のすべてをインデント解除する必要があります。if例えば:

def Max(list):
    if len(list) == 1:
        return list[0]
    else:
        m = Max(list[1:])
        return m if m > list[0] else list[0]

def main():
    list = eval(raw_input(" please enter a list of numbers: "))
    print("the largest number is: ", Max(list))

main()
于 2012-10-03T15:12:37.100 に答える
3

上記の問題を解決するためのもう1つのアプローチがあります

def maximum(L):
    if len(L) == 1:
        return L[0]
    else:
        return max(L[0],maximum(L[1:]))

入力と出力の例:

L= [2,4,6,23,1,46]
print maximum(L)

生産する

46
于 2013-12-12T17:28:07.930 に答える
2

基本的なアプローチはこれです。

  1. リストに含まれる要素が 1 つだけの場合、その要素が最大です。すぐに返却してください。
  2. それ以外の場合、リストには複数の要素が含まれます。リストの最初の要素が最大値であるか、そうでないかのいずれかです。
  3. 最初の要素の最大値は、単にリストの最初の要素です。
  4. 残りの要素 (最初の要素を除くすべて) を再帰的に呼び出しMaxて、それらの要素の最大値を見つけます。
  5. 手順 3 と 4 の結果を比較します。結果は、数値が大きい方です。返してください。

現在、いくつかの構文エラーがあります。たとえば、 1 つelseの に対して 2 つの句がifあり、インデントが変に見えます。else1 つのifブロックに 1 つしか持てません。しかし、これらの指示に従えば、機能するアルゴリズムが得られるはずです。

于 2012-10-03T15:15:25.727 に答える
1
def Max(lis,maxx=-float("inf")):

    if len(lis) == 1:            #only one element in lis
        return maxx if maxx>lis[0] else lis[0]  #return lis[0] if it's greater than maxx

    else:
        m=lis[0] if lis[0]>maxx else maxx  # m = max(lis[0],maxx)
        return Max(lis[1:],m)              #call Max with lis[1:] and pass 'm' too

print Max([1,2,39,4,5,6,7,8]) #prints 39
print Max([1,2,3,4,5,6,7,8]) #prints 8   
于 2012-10-03T15:14:54.370 に答える
1

これらのソリューションは、特定のリスト サイズの後に失敗します。

これはより良いバージョンです:

def maximum2(a, n):
    if n == 1:
        return a[0]
    x = maximum2(a[n//2:], n - n//2)
    return x if x > a[0] else a[0]
def maximum(a):
    return maximum2(a, len(a))

maximum(range(99999))


>>> 99998
于 2014-11-22T20:26:57.423 に答える
-3
def getMaxNumber(numbers): 
    return 'N.A' if len(numbers) == 0 else max(numbers)
于 2016-01-31T04:12:48.600 に答える