fork download
def partition():
    global n, sum, stack
    sum = 0
    n = int(input("n="))
    stack = [0]*(n+1)

    def init(level):
        if level == 1:
            stack[level] = 0
        else:
            stack[level] = stack[level-1] - 1
    def succ(level) -> bool:

        global sum
        if stack[level] < n - sum:
            stack[level] +=1
            return True
        else:
            sum -= stack[level-1]
            return False

    def valid(level) -> bool:
        global sum
        if stack[level] <= n - sum:
            sum += stack[level]
            return True
        return False

    def sol(level) -> bool:
        return sum == n

    def printf(level):
        global sum
        for i in range(1, level+1):
            print(stack[i], end = " ")
        print()
        sum -= stack[level]

    def solve(level):
        init(level)
        while succ(level) is True:
            if valid(level) == True:
                if sol(level) == True:
                    printf(level)
                else:
                    solve(level+1)
    solve(1)
partition()
Success #stdin #stdout 0.04s 9844KB
stdin
5
stdout
n=1 1 1 1 1 
1 1 1 2 
1 1 3 
1 2 2 
1 4 
2 3 
5