Причина, по которой ваша программа входит в бесконечный цикл, состоит в том, что цикл
while (n > 1)
x = n * fact(n-1);
никогда не уменьшается n
. Поскольку n
никогда не уменьшается, программа никогда не выйдет из цикла. Питер прав в комментариях: измените while
на if
, и у вас будет факториальная функция, которая правильно обрабатывает все положительные параметры. Однако даже после изменения while
на if
ваш fact
не будет иметь свойства fact(0) == 1
, как требуется для правильной факториальной функции.