zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    RocketMQ消息模型
    RabbitMQ消息模型
    消息队列选择
    消息队列使用场景
    synchronized底层实现
    Java 内存模型
    MySql中的字符数据类型
    php页面编码与字符操作
    git学习总结
    SESSION机制
  • 原文地址:https://www.cnblogs.com/JunSheep/p/8735335.html
Copyright © 2011-2022 走看看