Python 应用之计算阶乘
1.背景知识
阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号。一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,通俗的讲也就是按顺序从 1 乘到 n,所得的那个数就是 n 的阶乘。0 的阶乘为 1,自然数 n 的阶乘写作 n!。即:0!= 11!= 12!= 2 × 1!= 2 × 13!= 3 × 2!= 3 × 2 × 1n!= n × (n - 1)!= n × (n - 1) × (n - 2) ×...× 2 × 1
输入一个整数 n,求其阶乘 n!
1.1 双阶乘
双阶乘用“m!!”表示。
当 m 是自然数时,表示不超过 m 且与 m 有相同奇偶性的所有正整数的乘积。如:
当 m 是负奇数时,表示绝对值小于它的绝对值的所有负奇数的绝对值积的倒数。
当 m 是负偶数时,m!!不存在。
自然数双阶乘比的极限
阶乘的逼近函数公式
对于正整数
2.如何解题
用 input 函数请用户输入一个整数,因为负数无阶乘,需使用户输入的数为自然数
根据阶乘的特点:n!= n × (n - 1)!= n × (n - 1) × (n - 2) ×...× 2 × 1,可用 for 循环、递归等方法求解
需考虑特殊情况:0!= 1
3.解题方法
方法一:for 循环
第 1 行: 定义变量 a,用 input 函数使用户输入数字,int 函数将其转换为整型
第 2 行: 创建一个存储阶乘运算结果的变量 result,变量初始值为 1
第 3-10 行: 用 if...elif...else 语句对用户输入的数值进行判断。若用户输入的数值小于 0,输出“负数没有阶乘”;若用户输入的数值等于 0,输出“0 的阶乘为 1”;否则用 for 循环遍历 1 至 a 的整数,在每轮循环中,result 都会与循环变量 i 相乘并将乘积结果再赋值给 result,当 for 循环结束时,result 的值就是自然数 n 阶乘的运算结果,最后用 print 函数输出阶乘结果。
方法二: 递归法
第 1 行: 定义函数 factorial,传入参数 n
第 2 行: 用 assert 断言函数限定参数 n 大于或等于 0,若大于或等于 0,执行后面的代码,否则报错“AssertionError: 请输入自然数!
第 3-5 行: 设定递归的结束条件,当 n 为 0 时,返回值为 1,否则返回值为 n * factorial(n - 1)
第 8 行: 定义变量 a,用 input 函数使用户输入数字,int 函数将其转换为整型
第 9 行: 为参数 n 赋值为 a,用 print 函数打印计算结果
方法三: reduce()函数
第 1 行: 从 functools 模块中导入 reduce()函数
第 4 行: 定义函数 factorial,传入参数 n
第 5 行: 用 assert 断言函数限定参数 n 大于或等于 0,若大于或等于 0,执行后面的代码,否则报错“AssertionError: 请输入自然数!”
第 6-7 行: 设定递归的结束条件,当 n 为 0 时,返回值为 1
第 8 行: 调用 reduce 函数,使用 lambda 表达式输出前 n 项的积
第 11 行: 定义变量 a,用 input 函数使用户输入数字,int 函数将其转换为整型
第 12 行: 为参数 n 赋值为 a,用 print 函数打印计算结果
educe() 函数
reduce() 函数是 functools 模块中的一个函数,其作用是对参数序列中元素进行累积。
语法:reduce(function, iterable[, initializer])
参数说明:function:是包含两个参数的函数 iterable :可迭代对象 initializer :初始参数
函数 prod 有两个参数 x 和 y,迭代对象是[1,2,3,4,5],计算过程为((((1+2)+3)+4)+5),在函数 function 的两个参数中,左边的参数 x 是被累积的值,而右边的参数 y 是依次从序列中获取的值。可以使用 lambda 表达式来简化代码:
lambda 表达式
Lambda 函数是 Python 中的匿名函数,也就是没有具体名称的函数,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用 。
lambda 表达式的两个要点:
lambda 表达式必须使用 lambda 关键字定义。
在 lambda 关键字之后、冒号左边为参数列表,可不带参数,也可有多个参数。若有多个参数,则参数间用逗号隔开,冒号右边为 lambda 表达式的返回值。
方法四: factorial()函数
第 1 行: 导入模块 math
第 2 行: 定义变量 a,用 input 函数使用户输入数字,int 函数将其转换为整型
第 3 行: 创建变量 result,调用 math 模块中的 factorial 函数,传入参数 a
第 4 行: print 函数输出结果
版权声明: 本文为 InfoQ 作者【向阳逐梦】的原创文章。
原文链接:【http://xie.infoq.cn/article/4d71b01549bc8bcd0987fa45b】。文章转载请联系作者。
评论