numbers can be regarded as product of its factors for example 8 2 x 2 x 2 2 x 4 write a function that takes an integer n and return all possible combinations of its factors numbers can be regarded as product of its factors for example 8 2 x 2 x 2 2 x 4 examples input 1 output input 37 output input 32 output 2 16 2 2 8 2 2 2 4 2 2 2 2 2 summary arguments n int to analysed number returns list of lists all factors of the number n summary helper function arguments n int number i int to tested divisor combi list catch divisors res list all factors of the number n returns list res summary computes all factors of n translated the function getfactors in a callstack modell arguments n int to analysed number returns list of lists all factors summary analog as above arguments n int description returns list of lists all factors of n summary arguments n int to analysed number returns list of lists all factors of the number n summary helper function arguments n int number i int to tested divisor combi list catch divisors res list all factors of the number n returns list res summary computes all factors of n translated the function get_factors in a call stack modell arguments n int to analysed number returns list of lists all factors summary analog as above arguments n int description returns list of lists all factors of n
def get_factors(n):
    

    def factor(n, i, combi, res):
        

        while i * i <= n:
            if n % i == 0:
                res += combi + [i, int(n/i)],
                factor(n/i, i, combi+[i], res)
            i += 1
        return res
    return factor(n, 2, [], [])


def get_factors_iterative1(n):
    

    todo, res = [(n, 2, [])], []
    while todo:
        n, i, combi = todo.pop()
        while i * i <= n:
            if n % i == 0:
                res += combi + [i, n//i],
                todo.append((n//i, i, combi+[i])),
            i += 1
    return res


def get_factors_iterative2(n):
    

    ans, stack, x = [], [], 2
    while True:
        if x > n // x:
            if not stack:
                return ans
            ans.append(stack + [n])
            x = stack.pop()
            n *= x
            x += 1
        elif n % x == 0:
            stack.append(x)
            n //= x
        else:
            x += 1