Это потому, что рекурсивный вызов в вашем коде не прекращает выполнение вызывающей функции.
return
только после части print it out
.
Поэтому каждый вызов функции, верхнего или более высокого уровня, печатает текст непосредственно перед возвратом результата вызывающей стороне, почти так же, как при печати «Я вычисляю» каждый раз.
Попробуйте найти способ обнаружить, что текущее выполнение находится на верхнем уровне или на самых глубоких вызовах, и просто добавьте if
, чтобы распечатать «Done» только в этом случае.
РЕДАКТИРОВАТЬ: или просто переместите 'print' Done '' из factorial
и переместите его в main
, после вызова factorial
..