阶乘
来源:互联网 发布:免费一级域名注册永久 编辑:程序博客网 时间:2024/04/28 10:05
一个正整数乘上比他小的所有正整数即得到阶乘。(这句是对阶乘运算本质的理解)例如,4的阶乘(数学表示为4!)是4X3X2X1,即24.而5!是5x4X3X2X1,即120.有人会注意到一个公式:
当x>1,x!=x X (x-1)!
当x=1,x!=1;
换句话说,1的阶乘明确的定义为1;其他所有的阶乘可以根据阶乘的定义,导致阶乘函数的递归实现:
函数用比n小1的数来调用它自己,知道n等于1为止。当n等于1时,递归展开,提供正确答案。
递归实现非常简单,但并不快。假定处理大范围正整数时,一个非常大的正整数的阶乘可能导致栈的溢出。函数调用的效率并不高。解决的办法是不要递归,用迭代函数来实现factorial:
factorial的迭代实现要长一些,看上去比递归实现更复杂。但因为去掉了函数调用和栈操作的开销,所以比递归方法执行起来更快。
factorial的函数可以通过查表来实现,它去掉了反复的乘法运算,但需要为表分配静态存储空间。
总结:迭代的运行速度要优于递归的运行速度;而查表的运行速度优于迭代的运行速速。查表法的缺陷是需要大的空间来存储表的结构。
这里对阶乘本质的理解:一个正整数乘上比他小的所有正整数就是得到阶乘。我喜欢这句话,它与我们在学校里的课本上的说法是不同的,我觉得这种说法更合理,更接近阶乘运算的本质。
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- 阶乘
- ubuntu 安装完需要做的事
- AS3.0中使用TextField显示Embed的图片
- 说再见,为明天
- sql server 2000 一个表的数据插入到三个相关联表中,一条一条的插入
- 我的面试宝典(2):制作简历的原则
- 阶乘
- OO的五大原则中的 LSP(里氏替换原则)
- google竞赛题SecretSum的另一种C++解法, 使用递归生成代替循环 -- 2
- 号码携带(Baidu)
- Java IO 包中的Decorator模式读后的想法
- PHP 的命令行模式
- phpmyadmin中MySQL如何加密(配置)
- linux查看系统信息命令
- 我喜欢笑,这不仅是对自己的犒赏,也是给别人最好的礼物