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

负数的阶乘有意义吗?小萌九尾 。
数字的阶乘大家都不陌生,原理也很明确,就是给一个正整数,然后求所有小于等于这个正整数的乘积 。
这里我们应该明确几点:
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开始 。
#include<stdio.h>intmain(){intnumber;intfactorial=1;//因为factorial是阶乘的英文scanf("%d",&number);for(inti=1;i<=number;i++){factorial=i*factorial;//这样是确保即便当number=0的时候,结果也为1}printf("%d",factorial);}测试结果:
第二,在主函数外写一个子函数,然后直接调用主函数内的子函数 。
#include<stdio.h>voidfactorial(){intnumber;intfactorial=1;//因为factorial是阶乘的英文scanf("%d",&number);for(inti=1;i<=number;i++){factorial=i*factorial;//这样是确保即便当number=0的时候,结果也为1}printf("%d",factorial);}intmain(){factorial();//可以说,就是直接把主要代码这部分给拎出来,然后在主函数调用}其实可以贴在资源网上,和上面直接在主功能写的方法没什么区别 。唯一不同的是,它看起来更直观,代码不完整 。
【负数的阶乘有意义吗 负数的阶乘】测试结果:
第三,在主函数之外写一个递归函数,也就是让子函数不断地调用自己 。
与前两种方法相比,递归函数显然更容易理解,并且明显使代码更高效 。因为0的阶乘是0,所以要分开判断,也就是结果是1,然后乘以一个比它小的数 。
其实这个逻辑很容易理解 。给定数字5,那么5乘以阶乘(4),而阶乘(4)乘以阶乘(3) 。由此推论一直持续到最小值乘以1,满足所有数字从1到自身的乘法 。
#include<stdio.h>intfactorial(int&资源网nbsp;n){if(n<=0){return1;}returnn*factorial(n-1);//与比它小的正整数相乘}intmain(){intnumber=0;scanf("%d",&number);printf("%d\n",factorial(number));//与之前相比,显然变得更简单了些}测试结果:
摘要总的来说,阶乘其实挺简单的,就是大资源网大师的思维要多开拓一点,不局限于只用一种方法,而是多利用以前学过的一些方法,这样可以提高代码利用率,提高编程能力 。


    推荐阅读