1.5.2 实例:求阶乘
理解递归算法最简单的例子就是:编写程序求n的阶乘(n!)。所谓阶乘,就是从1到指定数之间的所有自然数相乘的结果,或者说阶乘就是从数n到1之间的所有自然数相乘的结果,可写为以下算式:
n!=n*(n-1)*(n-2)*...... *2 * 1
例如,6的阶乘为:
理解递归算法最简单的例子就是:编写程序求n的阶乘(n!)。所谓阶乘,就是从1到指定数之间的所有自然数相乘的结果,或者说阶乘就是从数n到1之间的所有自然数相乘的结果,可写为以下算式:
n!=n*(n-1)*(n-2)*...... *2 * 1
例如,6的阶乘为:
6*5*4*3*2*1=720
由阶乘的算式可看出,阶乘运算可以直接使用循环来完成,也可以使用递归来进行计算。可以将n的阶乘分解为以下算式:
n!=n*(n-1)!
即n的阶乘等于n乘以n-1的阶乘。
同样,又可将n-1的阶乘分解为n-1乘以n-2的阶乘,算式如下:
(n-1)!=(n-1)*(n-2)!
则
n!=n*(n-1)*(n-2)!
这样,当将变量n逐步减小,到1时,就完成了递归操作,也就有了结束递归的条件。因此,可以使用递归算法来编写求阶乘的代码。
编程经验 像这种“将问题化为一个缩小了的子问题”的情况,就构成了递归调用,程序就可考虑使用递归算法来编写。
#include<stdio.h>
int fact(int n);//函数声明
3 int main()
{
int i;//定义变量
printf("请输入要求阶乘的一个整数");