赞
踩
一、阶乘的定义
先讲一下阶层的定义:
阶乘是基斯顿·卡曼(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;
- }
以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。