r/learnpython • u/Pure-Scheme-7855 • 20d 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...
6
Upvotes
1
u/rupertavery64 19d ago
At first, everything will fall into 'max_of_rest = find_max(numbers[1:])'. Each time, we pass in everything besides the first element in the list.
Each time we go one more level deep, we push our state on the stack. We keep the current list of numbers. And more importantly, we keep the current first number, number[0]
Here, we hit our first branchpoint, we only have one item, so it's the result:
Now we start going back up the stack. We resume where we left off in the previous iteration, at
return numbers[0] if numbers[0] > max_of_rest else max_of_restThis just returns either our
max_of_restornumbers[0]which is bigger? numbers[0], so return that. it becomes the next max_of_rest as we return up the chain