matlab中的阶乘函数是factorial,其函数形式为:factorial(N) 。
当N为向量时,计算从1到N这N个数的乘积,即相当于prod(1:N);
当N是N维数组时,计算N中每个元素的阶乘。
注意:由于在matlab中双精度浮点数的整数位数大约是15位,只有对不大于21的整数计算结果是精确的,对大于21的整数,factorial的计算结果只有前15位是准确的。
:优势特点
1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;
2) 具有完备的图形处理功能,实现计算结果和编程的可视化;
3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;
4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
2!是一个阶乘计算,是计算2的阶乘,2!=2。具体的计算过程如下:
2!=2x1=2
阶乘的计算方法:
当所求阶乘数大于等于1时,用公式n!=nX(n-1)x(n-2)x•••x3x2x1进行计算。
当所求阶乘数等于0时,用0!=1计算。
当所求阶乘数小于0时,该式无意义。
扩展资料:
双阶乘用“m!!”表示。
当 m 是自然数时,表示不超过 m 且与 m 有相同奇偶性的所有正整数的乘积。如:
当 m 是负奇数时,表示绝对值小于它的绝对值的所有负奇数的绝对值积的倒数。
当 m 是负偶数时,m!!不存在。
-阶乘
f是fac()函数内部的静态变量,那么,f只在第一次进入fac()函数时才执行其初始化 *** 作,以后都会跳过初始化 *** 作。所以第一次执行fac(1)函数时,f初始化为1,并乘以1,f仍为1;第二次执行fac(2)时,跳过初始化 *** 作,f=f2,f为2;第三次执行fac(3)时,跳过初始化 *** 作,f=f3,f为6;第四次执行fac(4)时,跳过初始化 *** 作,f=f4,f为24;以此类推。
#include<stdioh>
#define N 10 ; /定义符号常量N,代表数字/
Long fun(int i)
{
If(n==1)
return 1 ; /递归出口/
else
return ifun(i-1); /递归体/
}
void main()
{ long k;
int i;
for(i=1;i<=N;i++)
{
k=fun(i) ; /调用函数fun()求阶乘,并赋值给K/
prinft("%d!=%ld",i,k); /输出/
}
}
阶乘(factorial)是:所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。
计算方法:
大于等于1
任何大于等于1 的自然数n 阶乘表示方法:或
0的阶乘0!=1。
扩展资料:
阶乘定义范围:
通常我们所说的阶乘是定义在自然数范围里的(大多科学计算器只能计算 0~69 的阶乘),小数科学计算器没有阶乘功能,如 05!,065!,0777!都是错误的。
但是,有时候我们会将Gamma 函数定义为非整数的阶乘,因为当 x 是正整数 n 的时候,Gamma 函数的值是 n-1 的阶乘。
伽玛函数(Gamma Function)
定义伽马函数:
运用积分的知识,我们可以证明Γ(s)=(s)× Γ(s-1)
所以,当 x 是整数 n 时, 这样 Gamma 函数实际上就是阶乘的延拓。
参考资料:
如何实现一个阶乘运算?
举例
输入:int n
比如n = 5, n = 8
输出:int x
n = 5,5的阶乘, 所以x = 120
n = 8,8的阶乘,所以x = 40320
题目介绍
阶乘问题是一个简单的数学问题,今天我们之所以提到这个问题是因为它和recursion之间有着不解之缘。有些同学可能能够迅速用recursion的方法做出这道题目,但是对recursion本身的了解并没有那么透彻。提到recursion,阶乘问题可以作为一个典型的例子,让大家能够由浅入深地了解recurion。这道阶乘运算是Microsoft的面试题之一,而跟recursion相关的题型也是大家在许多公司的面试中会遇见的。
今天希望大家忘掉这道题目的答案,跟我一起重新思考。阶乘是指用1乘以2乘以3乘以4,一直乘到所要求的数。例如所要求的数n = 5,则结果 x = 1 × 2 × 3 × 4 × 5,这里的乘积x就是n的阶乘。
分析题意
阶乘是指用1乘以2乘以3乘以4,一直乘到所要求的数。例如所要求的数n = 5,则结果 x = 1 × 2 × 3 × 4 × 5,这里的乘积x就是n的阶乘。
分析解题思路
了解了阶乘的定义以后,我们可以思考一个问题,我们想要知道n的阶乘,那么只需要知道n - 1的阶乘,我们想要知道n - 1的阶乘,那么只需要知道n - 2的阶乘,也就是说规模为n的问题,转化为了规模更小的问题。根据这个性质,我们应该自然而然的联想到recursion。
这里让我们一起回顾一下什么是recursion,在表象上recursion是直接或者间接调用自身函数的方法,而本质上是把一个大规模的问题变成比它小一个规模的问题。
既然如此,对于这道题目,我们可以试着用recursion的思想来解决。解决recursion的问题,我们第一步要想base case是什么,即最小规模的问题是什么, 这也是这个函数的终止条件,没有这个条件,我们所写的函数就会永无止境的运行下去。那么对于阶乘来说,当n <= 1的时候(在这里我们不考虑负数,0! = 1, 1! = 1),结果都是1,这就是它的最小规模问题。
第二步我们开始思考recursion rule,怎样把这个问题变成更小规模的问题。比如我们想解决n的阶乘,那么我们只要解决n - 1的阶乘,最后再用(n - 1)的阶乘乘以n就是我们想要的结果。
所以如果n = 5,那么5的阶乘和5 factorial(4)的结果相同。
综合第一步和第二步,我们可以开始编写阶乘函数:
int factorial (int n) {
if (n <= 1) {
return 1;
}
return n factorial(n - 1);
}
在这个方法中我们需要注意返回的类型是int,所以它可以解决的阶乘数也是有范围的。
如果要精确计算阶乘,阶乘没有什么简便方法,只能一个一个的往下乘。
这也是为何要专门用一个!来表示阶乘。
如果只想计算大概的值,可以用“
斯特林公式”
(请自行百度)。
其实想想也很自然,
100!=1x2x3xx10x11x12xx20x21xx99x100,
从10以后,每乘一次,这个数就至少增加一位,所以这个数就是写出来,也至少是100位左右的数字,假设有的话,这个公式该多复杂。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)