004-- 用递归求解某数的阶乘
n的阶乘:n(n-1)(n-2)(n-3)****1
流程分析:
1、输入某个数字n,计算该数字的阶乘:n!
2、递归求阶乘函数,参数为n:
2.1、判断数字是否等于1,如果等于1 ,函数返回1
2.2、如果函数不返回1,则函数返回n*fun(n-1),以此递归
代码分析:
def factorial(n): if n==1: return 1 return n*factorial(n-1) def main(): n=input("请输入数字的阶乘:") if n.isdigit(): n=int(n) print("%d的阶乘为%d"%(n,factorial(n))) else: print("输入的值非数字!") if __name__=="__main__": main()
非递归解法:
1、使用内置函数中的reduce函数,解决序列,1.....i
2、使用reduce之前需要引入functool模块--from functool import reduce
3、用整数的内置乘法,int.__mul__算出序列的乘积1*...*i
代码:
import functools result = (lambda k: functools.reduce(int.__mul__, range(1,k+1),1))(5) print(result) 120
题目反思 :
1、这算是我第一次做递归题把,虽然题目很简单,但是这个方法并不是我自己想到的,而是百度搜索的,很羞耻。
2、递归其实就是函数满足某个条件后,运行本身函数,直到不满足条件为止(个人理解,不对还望改正)
3、今天看到了一个另外的解法,觉得写得很不错,而且一行代码就搞定,不过只是不符合题目用递归的思想,但是代码的高效、快捷确实可以让一件事情变得更简单。
新学知识点:
1、阶乘的函数编写,运用递归的思维
2、初步了解递归的用法
3、reduce(function, iterable[, initializer])
- function -- 函数,有两个参数
- iterable -- 可迭代对象
- initializer -- 可选,初始参数
4、int.__mul__:int内置方法,相乘
类似的方法有:
int.__add__:相加
int.__abs__:绝对值
...
Mark on 2018.04.07
Add on 2018.04.08