DAY 004--递归求某数的阶乘

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

原文地址:https://www.cnblogs.com/JunSheep/p/8735335.html