负数的阶乘(负数的阶乘有意义吗)

/ 0评 / 0

负数的阶乘(负数的阶乘有意义吗)小萌九尾

数的阶乘,想必大家都很熟悉,原理也很清楚,就是给一个正整数,然后求所有小于等于这个正整数的积。

我们想在这里说清楚:

1.负数没有阶乘,所以默认值是正整数。

2和0的阶乘是1,这是人为规定的,记住就好。

好了,今天我们的重点是用C语言实现数的阶乘,但是我提了一个要求:应用前几天学过的知识,借助函数和递归函数实现数的阶乘。

这样既能赞助我们复习函数和递归函数,又能巩固我们的C语言基础。

在正式实现C语言中数字的阶乘之前,我们先来看看其中的逻辑。

数的阶乘,除了0的阶乘是1,正整数的阶乘是所有小于等于它的乘积。

给定一个数5,那么5的阶乘就是5!=1x2x3x4x5 = 120 .

在这里,我们需要使用一个循环,即我们可以一直遍历小于5的数字。

遍历完1,2,3,4,5,一次次相乘。

初始值是1,然后第一次乘法是1,第二次乘法是1和2,直到第五次乘法是前面四次乘法的乘积乘以5,最后得到120。

先给出流程图,方便大家了解技术资源网。

负数的阶乘(负数的阶乘有意义吗)

代码实现有三种方式

第一种:把所有代码直接写在主函数里。

这个方法比较直观,就是遍历一个给定的数,从1开始到自身,然后不断相乘。注意,我这里开头用了给定的数相乘,但实际上这是有问题的,我还是要从1开始,1的阶乘实际上是从1开始的。

#includeint main(){    int number;    int factorial = 1;//因为factorial是阶乘的英文    scanf("%d", &number);    for(int i=1; i

测试结果:

负数的阶乘(负数的阶乘有意义吗)

第二,在主函数外面写一个子函数,然后在主函数里面直接调用子函数。

#includevoid factorial(){    int number;    int factorial = 1;//因为factorial是阶乘的英文    scanf("%d", &number);    for(int i=1; i

其实可以发明的是,这个方法和我们直接在上面的主函数里写的方法没什么区别,除了看起来更直观,代码有点东拼西凑。

测试结果:

负数的阶乘(负数的阶乘有意义吗)

第三,在主函数之外写一个递归函数,也就是让子函数不断调用自己。

与前两种方法相比,递归函数显然更容易理解,也明显使得代码的应用率更高。因为0的阶乘是0,所以要分开判断,也就是结果是1,然后乘以一个比它小的数。

其实这个逻辑很好理解。给一个数5,然后乘以阶乘(4),同时阶乘(4)乘以阶乘(3),依此类推,直到最小数乘以1,那么从1到它本身的所有数都可以相乘。

#includeint factorial(int n){    if(n

测试结果:

负数的阶乘(负数的阶乘有意义吗)

摘要

总的来说,阶乘其实挺简单的,就是大家的思维要多开一点,不要局限于只有一种实现方式,还要应用之前学过的一些方法,这样可以提高代码的应用率,提升自己的编程能力。