#include<stdio.h>
int fact(int n);
int main(void)
{
int n;
int result = 0;
scanf("%d", &n);
result = fact(n);
printf("%d\n", result);
}
int fact(int n)
{
if(n == 0)
{
return 1;//0的阶乘为1
} else
{
return n * fact(n - 1);
}
}
分治思想--将要难以直接求解的较大规模(n)的问题分割成k个更小规模相同的子问题(n/m),对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为 k个子问题,如此的进行下去,直到问题规模足够小,很容易求解为止。将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。
递归算法--直接或间接地调用自身的算法(俗称套娃)
递归函数--用函数自身给出定义的函数成为递归函数,递归函数只有具备边界条件(出口)和递归式,才能在有限次计算后得出结果,上面的代码中:
if(n == 0)--边界条件(出口)
fact(n) = n * fact(n - 1);--递归式
找递归式,由上述程序为例子通过观察我们就可以知道要求n!,则只需要求(n - 1)!,因为 n! = n * (n - 1)!以此类推,求( n - 1)!,只需要求出((n-1)- 1)!,即fact(n)= n * fact(n - 1)(注意,下一个传入的实参,会被fact函数中定义的n接收,红色字体是指main函数定义的n,绿色字体的n是指在fact函数定义的n),直到当(传入到fact函数的实参)n = 1时(出口),函数fact开始向上返回结果,返回1!,则可得出2! = 2 * 1!= 2,再将2!返回可得出3! = 3 * 2!= 6,以此类推,最后得出n!= n * (n - 1)!