#include <iostream>
using namespace std;
// 前置条件: n >= 0
// 后置条件: 返回的数值是n!,也就是1和n(包括1和n)之间的
// 所有整数的乘积。
// (递归版本--存储需要较大)
// worstTime(n)是O(n).
long factorial(int n)
{
if (n == 0)
return 1;
else if (n < 0){
cout << "Illegal parameter!\n";
return 0;
}
else
return n * factorial(n-1);
}
// (迭代版本)
// worstTime(n)是O(n).
long iteration(int n)
{
int product = n;
if (n == 0)
return 1;
else if (n < 0){
cout << "Illegal parameter!\n";
return 0;
}
for (int i = n-1; i > 1; i--)
product = product * i;
return product;
}
int main()
{
cout << "Please enter a integer:\n";
int n;
cin >> n;
cout << n << "! = " << factorial(n) << endl << endl;
cout << "Now, please enter a integer:\n";
cin >> n;
cout << n << "! = " << iteration(n) << endl;
return 0;
}