Es hat genau das, was Sie gefragt haben, zu tun.
Ihre Funktion ist nicht rekursiv, da Sie vergessen haben, sie gegen Ende wieder aufzurufen.
So etwas ist, was Sie suchen:
def maxElement(L):
length=len(L)
if L[length-1]>L[length-2]:
del L[length-2]
print L
elif L[length-1]<L[length-2]:
del L[length-1]
if len(L) == 1:
return L
return maxElement(L)
print maxElement([1,2,95754754745,3,1,8,444,2,42425])
Dies würde zurück:
[1, 2, 95754754745L, 3, 1, 8, 444, 42425]
[1, 2, 95754754745L, 3, 1, 8, 42425]
[1, 2, 95754754745L, 3, 1, 42425]
[1, 2, 95754754745L, 3, 42425]
[1, 2, 95754754745L, 42425]
[1, 95754754745L]
[95754754745L]
[95754754745L]
Ich würde es ein bisschen besser machen, wie folgt:
def maxElement(L):
length=len(L)
if length == 1:
# Have this condition on the top because you are using length - 2 later
# Just return the only element
return L
if L[length-1] > L[length-2]:
# If the last element is greater than the last but one, delete the last but one
del L[length - 2]
else:
# Simple else would suffice because you are just checking for the opposite
# Also this condition saves you from:
# infinite looping when the last two elements are equal
del L[length - 1]
print L
# Time to call it recursively.
# But if you just don't want to unnecessarily increase the recursion
# tree depth, check for length and return it
if length == 1:
return L
return maxElement(L)
die Funktion, die Sie geschrieben hat, ist nicht rekursiv. Damit eine Funktion rekursiv ist, muss sie sich selbst aufrufen, dh innerhalb des 'def a_function()' -Blocks muss ein 'a_function()' -Aufruf erfolgen. Wie Sie wahrscheinlich wissen und einfach weil es nicht so weit ist, können Sie einfach 'max()' verwenden und Ihre Liste 'L' an sie übergeben wie' max_item = max (L) '. Ich nehme an, Sie wissen das bereits. –
@Rawing Das Hinzufügen einer while-Schleife würde diese Funktion nicht rekursiv machen. – Jokab
Es löschte ein Element - die letzte '2'. –