Если вы хотите сделать это полностью рекурсивным, я бы порекомендовал этот код, он возвращает правильный ответ, и способ его работы довольно ясен
Если вы хотите сделать программу максимально эффективной, я бы порекомендовал вам придерживаться одного из ваших предыдущих методов.
def primeFact (i, f):
if i < f:
return []
if i % f == 0:
return [f] + primeFact (i / f, 2)
return primeFact (i, f + 1)
Это полностью рекурсивный способ решения вашей проблемы
>>> primeFact (300, 2)
[2, 2, 3, 5, 5]
>>> primeFact (17, 2)
[17]
>>> primeFact (2310, 2)
[2, 3, 5, 7, 11]