一、阶乘的定义
先讲一下阶层的定义:
阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号,是数学术语。
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。
亦即n!=1×2×3×...×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。
二、递归写法
先看递归的函数写法:
/递归:
int Factorial(int n)
{
if (n!= 0)
return n* Factorial(n-1);
return 1;
}
思路是这样的的:把 n! 看成是 n * (n-1)!,由此实现递归,同时要给递归加上限制条件:n 不等于零
三、非递归写法
先看非递归写法的代码:
//非递归:
int Factorial(int n)
{
int count = 1;
int i = 1;
for (i = 1; i <= n; i++)
{
count *= i;
}
return count;
}
非递归的话,我选择了循环的方式。思路就是创建一个新变量 i ,并且 i 从1开始 ,循环到i <=n时停止,每次循环都把 i 的值乘到另一个变量 count ,这种写法是直接通过阶层的定义进行解题的
四、程序的全部代码
程序的所有代码如下图:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include<math.h> //非递归: int Factorial(int n) { int count = 1; int i = 1; for (i = 1; i <= n; i++) { count *= i; } return count; } //递归: //int Factorial(int n) //{ // if (n!= 0) // return n* Factorial(n-1); // return 1; //} int main() { int n=0; scanf("%d", &n); int ret = Factorial(n); printf("%d", ret); return 0; }
以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!