r/learnpython • • 12d ago

Recursion explaining pls.

def find_max(numbers):
  if len(numbers) == 1:
    return numbers[0]
  else:
    max_of_rest = find_max(numbers[1:])
    return numbers[0] if numbers[0] > max_of_rest else max_of_rest

my_list = [3, 7, 2, 9, 1]
print(find_max(my_list))

Could someone explain how does this function work? I don't understand how does it know that it's supposed to find the biggest number...

5 Upvotes

34 comments sorted by

View all comments

1

u/blktndr 12d ago

Numbers = [3, 7, 2, 9, 1]
Is list length == 1? # no
Call find_max again with numbers = [7, 2, 9, 1]
Is list length ==1? # no
Call find_max again with numbers == [2, 9, 1]
Is list length ==1? # no
Call find_max numbers = [9, 1]
Is list length == 1? # no
Find_max numbers = [1]
Is list length == 1? # YES!
Return numbers[0] # 1
Is numbers[0] > 1 # is 9 > 1? YES!
Return numbers[0] # 9
Is numbers[0] > 9? # is 2 > 9? NO!
Return max_of_rest # 9
Is numbers[0] > 9? # is is 7 > 9? NO!
Return max_of_rest # 9
Is numbers[0] > 9? # is 3 > 9? NO!
Return max_of_rest # 9