You can see @helptaker's explanation to recursion. In this case, I'm assuming the function checks the left and right halves of the data unless it's empty. It will then take the results of those recursive calls and combine them.
So in your example, the base case would be when root==None
, which is probably when the data gets small enough. Otherwise, this function would call itself on two smaller-sized problems. These two recursive calls would return their results, and the function would determine its return value based on those results.
In conclusion this function will break the problem down into smaller and smaller pieces and solve them each, combining the results.
Here's some resources on recursion:
(If you search "recursion" on Google, it will even show "Did you mean: recursion" as an example)