负数的阶乘应怎样算负数的阶乘负数的双阶乘等于多少

文章目录[隐藏]

  • 开头来说给出流程图,方便大家领会。
  • 代码实现有三种方式。
  • 简介

负数的阶乘有意义吗?小萌九尾。

数字的阶乘大家都不陌生,原理也很明确,就是给一个正整数,接着求所有小于等于这个正整数的乘积。

这里我们应该明确几点:

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(&quot;%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(intn)if(n<=0)return1;}returnn*factorial(n-1);//与比它小的正整数相乘}intmain()intnumber=0;scanf("%d",&number);printf("%d\n",factorial(number));//与之前相比,显然变得更简单了些}

测试结局:

简介

往实在了说,阶乘其实挺简单的,就是每个人都要多开放一点思考,不局限于只用一种技巧,而是多利用以前学过的一些技巧,这样可以进步代码利用率,进步自己的编程能力。

赞 (0)
版权声明