阶乘运算(Factorial)

任何大于等于1 的自然数n 阶乘:

也即

下表给出了一些自然数的阶乘值:

https://en.wikipedia.org/wiki/Factorial

100!是一个158位的整数

100!这么大的数到底怎么算出来的呢?

阶乘的计算

直接求阶乘,需要经过大量的乘法运算,位数太多,计算机也无法表示出来。此时,往往采用对数方法,将阶乘的乘法运算化为加法运算。如

编写一段Python语言代码求等式右边的值:

import math

digit_num =0.0

for i in range(100):

digit_num += math.log10(i+1)

print(digit_num)

运行得到

157.97000365471575(近似值),即

这说明100!是一个158位的数。根据对数函数与指数函数的关系,可以反求出阶乘值:

以前不理解对数意义的朋友这里可以体会到对数的强大威力了吧?

另,阶乘有一个有趣的近似公式:

斯特林()公式- Stirling's approximation

斯特林公式与阶乘曲线对比

我们实际验证一下斯特林公式的误差。将n=100代入上述公式,得到100!≈9.3248476252693432477647561271787023234709745647418062292817958153368849555554046603086239162755522767325066157982750581730201788648720772023094674209485726744222550819049228652031041119504096696429434529708431163809342056757648101523406286160085266735172818639831611426620941684736285030409855242311268344207307073067790438191255736013812573265362270229118719809726115438569410402607630035313046957956392566366745658132452941877904052886947223641749037779513877635612354880691524914259437590327045612488757528210... × 10^157

与我们用对数求得的值之间的误差大约为0.08329%,即万分之8.3,相当精准吧!!!

阶乘的延拓

可以将点(n, n!)即(0, 0!), (1,1!), (2,2!), (3,3!),...在平面坐标系上表示出来。

n!, n=0..4

n!, n=0..6

n!, n=0..10

我们能不能找到一条数学曲线,能够穿越上述所有点(n,n!)呢?找到这样一条曲线的过程就是数学上的解析延拓,从整数域解析延拓到实数域。

伽玛函数

人类恰恰找到了这样一个函数,即伽玛函数(Gamma Function)。伽玛函数的定义如下:

伽玛函数是一个用定积分公式定义的函数,所以求伽玛函数变成了求定积分。不难求得:

进而

伽玛函数与实数域阶层的关系

这些结论我就不做证明了,一方面这些知识可以很便捷地索到,另一也是更重要的方面是,毕竟我的目标不是吓唬大家和显摆自己的学问,而是希望尽可能充分地向大家分享、呈现数学的奥妙、美丽和魅力。

从该等式可以看出,阶乘不就是伽玛函数从实数域降维到整数域的降维函数吗?反之,伽玛函数不正是阶乘序列在从整数域向实数域的延拓吗?

伽玛函数衍生出的一个常数,即为弗朗桑-罗宾逊常数(Fransén–Robinson Constant):

问题:伽玛函数是阶乘运算的唯一解析拓展函数吗?

答案是否定的,因为满足这样的拓展函数有无数个。如如下函数在横坐标为整数时的值也等于对应的阶乘值:

实数域的阶乘函数

因为

也就是说

用如下方式来表示这个阶乘函数:

该阶乘函数有如下递推性质(从小到大,算正数的阶乘时用到):

从上面的递推公式,我们可以得到新的递推公式(从大到小,算负数的阶乘时用到):

我们试着求一下几个非整数实数的阶乘函数值:

根据这个值可以推出其他一系列值:

这π(x)就是实数域阶乘函数的一个合理定义公式。阶乘函数y=π(x)=x!的曲线如下图:

我们发现上述阶乘函数在负整数处不连续,即不收敛,与我们计算的结果相符:

最后再求两个特殊的阶乘

其实阶乘还可以延拓到复数域,如

复函数

曲线图如下

(cosx+isinx)!的曲线图

人家在何许?云外一声鸡

求n的阶乘的算法框图_阶乘也很有趣:从阶乘到伽玛函数到非整数的阶乘相关推荐

  1. 求n的阶乘的算法框图_单片机常用的14个C语言算法

    问:怎么每天看到这种文章? 答:只需搜索公众号"51单片机学习网"免费关注 算法(Algorithm):计算机解题的基本思想方法和步骤. 算法的描述:是对要解决一个问题或要完成一项 ...

  2. 求n的阶乘的算法框图_算法|从阶乘计算看递归算法

    欢迎点击「算法与编程之美」↑关注我们! 本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 1 理解递归 "程序设计是实践计算机思维的重要手段& ...

  3. 求n的阶乘的算法框图_算法——递归问题

    要理解递归,首先要理解递归. 从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚对小和尚说,从前有座山,山里有座庙,庙里有个老和尚和小和尚,老和尚对小和尚说,从前有座山...... 上面这些梗在递 ...

  4. 求n的阶乘的算法框图_递归算法是一种直接或者间接调用自身函数或者方法的算法...

    http://blog.csdn.NET/wangjinyu501/article/details/8248492 原版 一.基本概念 递归算法是一种直接或者间接调用自身函数或者方法的算法.Java递 ...

  5. 求n的阶乘的算法框图_当代程序员必备技能(算法)之:递归详解 - Java斗帝之路...

    前言 递归是一种非常重要的算法思想,无论你是前端开发,还是后端开发,都需要掌握它.在日常工作中,统计文件夹大小,解析xml文件等等,都需要用到递归算法.它太基础太重要了,这也是为什么面试的时候,面试官 ...

  6. 求n的阶乘的算法框图_干货丨Python 递归算法指归-百知教育

    1. 递归概述 递归( recursion)是一种编程技巧,某些情况下,甚至是无可替代的技巧.递归可以大幅简化代码,看起来非常简洁,但递归设计却非常抽象,不容易掌握.通常,我们都是自上而下的思考问题, ...

  7. c语言小学生算法,急求:C语言小学生算法练习软件实现的任务:面向小学生,随机选择两个整数进行加、减、乘、除,要求学生解答。设计内容:1、电...

    共回答了16个问题采纳率:100% #include #include #include #include int sumScore = 0; int corrN = 0;//全局变量 //总的分数 ...

  8. numpy序列预处理dna序列_?12个很棒的Pandas和NumPy函数,让分析事半功倍

    全文共5431字,预计学习时长16分钟 来源:Pexels 大家都知道Pandas和NumPy函数很棒,它们在日常分析中起着重要的作用.没有这两个函数,人们将在这个庞大的数据分析和科学世界中迷失方向. ...

  9. 阶乘java_Java中求阶乘的算法

    Java中求阶乘的算法 1.一般算法: public class Factorial { public static int factorial(int n) { if (n < 0 || n ...

最新文章

  1. OpenCV学习系列教程第五篇:测试和提高代码的效率
  2. 【Netty】什么是编码器和解码器?
  3. 对于java程序语言的单例设计模式讲解
  4. 物联网的未来:关于物联网的10个预测
  5. oracle数据库元数据SQL查询
  6. SQL2008 一直error40 无法连接到localhost
  7. raspberry pi_每日新闻摘要:新型iMac,NVIDIA的Raspberry Pi竞争对手等
  8. asp.net core MVC 过滤器之ActionFilter过滤器(二)
  9. 3.eclipse对mysql云数据库编程增删改查
  10. 基于python的聊天软件的设计与实现_Python基于TCP实现会聊天的小机器人功能示例...
  11. 华为USG6550 MIB CPU MEM
  12. OpenCV 实现颜色直方图
  13. poj1113 凸包
  14. bufferedreader读取中文乱码_Python OpenCV与中文相关的三个常见问题
  15. 如何将腾讯视频QLV格式转换成MP4
  16. Matlab 校验方法
  17. 朝花夕拾——动态规划
  18. 中华活页文选杂志中华活页文选杂志社中华活页文选编辑部2022年第8期目录
  19. unity 控制移动的方法
  20. matlab学习创建变量定义函数

热门文章

  1. VN1630 模拟CAN,LIN通信
  2. 树莓派小车教程(一)之——小车跑起来
  3. CAS和MESI和VOALTILE
  4. volatile可见性MESI协议volatile
  5. 一个案例彻底弄懂Go语言中的map (Golang经典编程案例)
  6. ManageEngine ADManager Plus可视化精细管理AD域——完全自定义所需的IT业务报表
  7. C语言逻辑运算和判断选择
  8. 智能客服系统如何帮助企业提高客户满意度?
  9. wordpress博客主题—仿国外koala主题
  10. c 语言文件写入,c语言文件的读取和写入