в python, когда вы умножаете число на True, оно будет работать так, как будто вы умножаете на единицу, а когда вы умножаете число на False, оно будет работать как при умножении на ноль.
так что это вот почему вы получаете факториал числа, даже если вы используете:
return True
вместо
return 1
, но если вы вызовете factorial (0), вы получите True вместо 1 .