负数的阶乘(负数的阶乘有意义吗)小萌九尾
数的阶乘,想必大家都很熟悉,原理也很清楚,就是给一个正整数,然后求所有小于等于这个正整数的积。
我们想在这里说清楚:
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
测试结果:
摘要
总的来说,阶乘其实挺简单的,就是大家的思维要多开一点,不要局限于只有一种实现方式,还要应用之前学过的一些方法,这样可以提高代码的应用率,提升自己的编程能力。