0

So I was working on a bit of code and found that when defining things recursively you can't have a method with a default variable based off of a passed in variable. A bit of surface level research shows that Python requires these to be declared at compilation. As such the following is not allowed.

    def foo(bar, potato = bar*bar):

        if(bar is 0): return potato
        potato -= bar
        return foo(bar-1, potato)

The code is hogwash. But if it worked it would return (bar*(bar-1))/2.

I know I could simply manually pass in potato, but are there other ways of making something similar to this work without using a global, or initially declaring potato?

Ezra
  • 3
  • 2

1 Answers1

0

You can do sth along the following lines which constitute an oft-seen pattern. Make the default parameter None and set it to the dependent value if appropriate inside the function:

def foo(bar, potato=None):
    if potato is None:
        potato = bar * bar  
    if bar == 0: 
        return potato
    potato -= bar
    return foo(bar-1, potato)

And if you are greedy with lines you can use the ternary if-else operator:

def foo(bar, potato=None):
    potato = bar * bar if potato is None else potato
    return potato if bar == 0 else foo(bar - 1, potato - bar)
user2390182
  • 72,016
  • 6
  • 67
  • 89