最近在写脚本刷题的时候,老是碰到阶乘的问题。单个数字的阶乘倒好说,难的是那种输入好几组数字、每组都要单独算一遍阶乘的情况。一开始我没想太多,直接套公式硬算,后来发现里面还是有点门道的。
先简单说说阶乘是啥。一个正整数的阶乘,就是从1一直乘到这个数本身,比如 `5! = 5 × 4 × 3 × 2 × 1 = 120`。这个定义不难,但真用代码实现的时候,选择还挺多。
在Python里,算阶乘主要有三种路子,各有各的好处,我列个表格方便对比:
| 实现方式 | 代码特点 | 适合场景 |
|---|---|---|
| 循环累乘 | 逻辑直白,就一个for循环 | 小规模、单个数计算 |
| 递归调用 | 写法简短,但层数太深会爆栈 | 教学演示、数字不大的时候 |
| math.factorial | 内置函数,速度快 | 实际项目里首选 |
我在自己写多组数阶乘的脚本时,优先用的是 `math.factorial`。因为Python内置的C语言实现比我手写的Python循环要快不少,尤其数字大的时候,差距特别明显。
多组数的输入其实也不麻烦。常见做法是,先把用户输入的多个数字存进一个列表,然后循环遍历,对每个数单独调用阶乘函数,把结果一个个放进输出列表里。逻辑上就是一个for循环套一个阶乘运算,但要注意,如果每组数字是单独一行输入的,那还得做个换行处理。
还有一点容易踩坑,就是阶乘增长得特别快。你算到 `20!` 就已经到天文数字了,`100!` 更是大得离谱,Python的大整数支持倒是能撑住,但性能上会有些吃紧。所以要是输入特别大的数字,建议提前做个范围判断,别让程序死等。
多组数阶乘这事,听着简单,但怎么写得明白、跑得快,还是值得琢磨一下的。优先用内置库、处理好输入格式、关注大数性能,基本就能写得挺顺手了。