Почему эта рекурсивная функция может вычисляться только до (20!)? Когда я ввожу 21, он показывает неожиданный результат.Рекурсивная факториальная функция не работает должным образом
#include <iostream>
using namespace std;
long long int factorial(long long int number)
{
if(number <= 1)
return 1;
return number * factorial(number - 1);
}
int main()
{
long long int number;
while(cin >> number)
cout << factorial(number) << endl; // factorial(20) = 2432902008176640000
// factorial(21) = -4249290049419214848 ????
return 0;
}
Это называется [переполнение] (http://en.wikipedia.org/wiki/Integer_overflow). –
Мне нравится этот пример одометра на странице Wiki. – Maroun