Top level of a recursive function

Chris Angelico rosuav at gmail.com
Tue Dec 13 12:36:46 EST 2022


On Wed, 14 Dec 2022 at 03:35, Michael F. Stemper
<michael.stemper at gmail.com> wrote:
>
> It's easy enough -- in fact necessary -- to handle the bottom
> level of a function differently than the levels above it. What
> about the case where you want to handle something differently
> in the top level than in lower levels? Is there any way to tell
> from within a function that it wasn't invoked by itself?
>

Why does it have to be the same function?

def _sort_recursive(stuff, keys, start, end):
    """imagine a nice implementation of some sorting algorithm here"""

def sort(stuff, key=None):
    if key:
        keys = [key(x) for x in stuff]
    else:
        keys = stuff
    return _sort_recursive(stuff, 0, len(stuff))

With purely recursive functions (where every call to the function
truly could have been a top-level call - a lot of mathematical
functions work out this way), it makes sense to call the
externally-callable function recursively; but for anything more messy,
it's usually easiest to make the recursive part internal, and then
have a top-level function that calls into the recursive one.

ChrisA


More information about the Python-list mailing list