Search code examples
python-3.xrecursion

python recursion i dont understand this output pls help me


def azalt(s):
    if len(s)< 1:
        return s
    else:
        print('özyinelemesürecine girerken:', s)
        azalt(s[1:])
        print('özyinelemesürecinden çıkarken:', s)

azalt('12345')

output :

özyinelemesürecine girerken: 12345
özyinelemesürecine girerken: 2345
özyinelemesürecine girerken: 345
özyinelemesürecine girerken: 45
özyinelemesürecine girerken: 5 #(***)
özyinelemesürecinden çıkarken: 5 
özyinelemesürecinden çıkarken: 45
özyinelemesürecinden çıkarken: 345
özyinelemesürecinden çıkarken: 2345
özyinelemesürecinden çıkarken: 12345

i didnt understand code after the #(***) (i put for highlight)

i expect output looks like this

output :

özyinelemesürecine girerken: 12345
özyinelemesürecine girerken: 2345
özyinelemesürecine girerken: 345
özyinelemesürecine girerken: 45
özyinelemesürecine girerken: 5

Solution

  • For better understanding you can add another parameter to the function (lets call it level=) that will increase by 1 when you call the function recursively:

    def azalt(s, level):
        if len(s) < 1:
            return s
        else:
            print("the string before:", s, f"{level=}")
            azalt(s[1:], level + 1)
            print("the string after:", s, f"{level=}")
    
    
    azalt("12345", level=1)
    

    The result is now:

    the string before: 12345 level=1
    the string before: 2345 level=2
    the string before: 345 level=3
    the string before: 45 level=4
    the string before: 5 level=5
    the string after: 5 level=5
    the string after: 45 level=4
    the string after: 345 level=3
    the string after: 2345 level=2
    the string after: 12345 level=1
    

    You see that second print() (the one with after) is executed when you return from recursive function.