求 n! 有两个思路:
- 迭代 iteration
-
递归 recursion
//这是递归
int factorial(int n)
{
if(n>1)
reurn n * factorial(n-1);
else
return 1;
}
//这是迭代
int factorial(int n)
{
int i, s=1;
for(i=1; i<=n; i++)
{
s = s * i;
}
return s;
}
递归法
就是在运行的过程中调用自己。
构成递归需具备的条件:
1. 子问题须与原始问题为同样的事,且更为简单,称为递归式子;
2. 不能无限制地调用本身,必须要有个递归出口,化简为非递归状况处理。
迭代法
也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。