Я пишу этот код, чтобы получить 10! однако я считаю, что у меня там бесконечный цикл, поскольку он повторяет один и тот же код ошибки. Я пытаюсь найти проблему, но не могу.
def calculatingfactor(num2cal):
"""this fuction will be calculating a mathematical factorial"""
if num2cal == 1:
returnvalue = 1
elif num2cal <= 0:
returnvalue = 0
else:
print("Calculating the facterial of {}".format(num2cal))
variable2 = calculatingfactor(num2cal - 1)
returnvalue = calculatingfactor(num2cal*variable2)
return
#main code
first_fact=calculatingfactor(10)
print (first_fact)





Рекурсивный случай вашего кода мне кажется неправильным. Вы должны вызывать ту же функцию с num2cal, уменьшенным на единицу, а затем возвращать текущее значение, умноженное на все, что вернул этот рекурсивный вызов.
def calculatingfactor(num2cal):
if num2cal == 1:
return 1
elif num2cal <= 0:
return 0
else:
print("Calculating the facterial of {}".format(num2cal))
variable2 = calculatingfactor(num2cal - 1)
return num2cal*variable2
# main code
first_fact=calculatingfactor(10)
print (first_fact)
Я пробовал этого Тим, но, к сожалению, получаю ту же ошибку TypeError: неподдерживаемые типы операндов для *: 'int' и 'NoneType', и ошибка выводится примерно 20 раз
@JoanthanMaldonado Приведенный выше код работает в этой демонстрации. У вас должна быть другая проблема в вашем коде.
Вы были правы со своим редактированием, и это была просто ошибка с моей стороны. Спасибо !
Однако я вижу, что вы хорошо понимаете факториал: почему вы дважды вызываете рекурсивную функцию? Этот второй вызов никогда не закончится, и вы получите исключение StackOverflowException. Вы должны обновить 10-ю строку кода для -> returnvalue * = variable2. Также обратите внимание, что условие «elif num2cal <= 0» сделает ваш результат равным нулю.