Ваша проблема в том, что вы нажимаете целочисленное переполнение .
Как вы отметили, факториал 5 равен 120.
Итак factorial(factorial(5))
совпадает с factorial(120)
. Как видите, вы не передаете функцию factorial
в качестве аргумента внешнему factorial
. Вы передаете результат вызова внутреннего факториала в качестве аргумента для внешнего факториала. Код эквивалентен этому:
int result = factorial(5); // result = 120
factorial(result); // factorial (120)
Проблема в том, что факториал 120 равен действительно большой номер , число почти 200 цифр
Теперь это намного больше, чем может хранить int
. Или даже long long unsigned int
. Вам нужны специализированные библиотеки для обработки произвольно больших чисел.