python多种计算阶乘和斐波那契数列的六脉神剑(上)

简介: 笔记

前言


       最近在python技能树重温以前学过的Python知识,把自己从知道点的大白又打回了小白了。知识果然知道的越多越觉得自己的不足。这个球的半径越大,空白也就越多。居安思危,日进尺步。分享几个我最近的学到的求阶乘、斐波那契的别样实现方法分享给大家。


一、求阶乘


0,1,2,3,4,5,6,7,8,9,10! 令人惊讶的是,6个星期的秒数居然也等于10!


不使用函数递归,实现一个阶乘计算函数(n<=170):


1、第一种方法

代码:


# -*- coding: UTF-8 -*-
def fact(n):
    r = 1
    import math
    r = math.factorial(n)
    return r
if __name__ == '__main__':
    while True:
        n=int(input("请输入要求的阶乘数:"))
        print("您所求阶乘数为:"+str(fact(n)))

效果:34.png


解析:利用python中math的自带函数 factorial,我们查看函数源码可以发现,该函数正式用于求阶乘的。35.png

2、第二种方法

代码:

def fact(n):
    r = 1
    for i in range(0, n):
        r *= (i + 1)
    return r
if __name__ == '__main__':
    while True:
        n=int(input("请输入要求的阶乘数:"))
        print("您所求阶乘数为:"+str(fact(n)))

效果:

36.png

解析:

利用for循环来计算对应阶乘即 s=1*2*....*n-1*n妥妥的数学最初对阶乘的解释。

3、第三种方法

代码:

# # -*- coding: UTF-8 -*-
# def fact(n):
#     r = 1
#     import math
#     r = math.factorial(n)
#     return r
#
# if __name__ == '__main__':
#     while True:
#         n=int(input("请输入要求的阶乘数:"))
#         print("您所求阶乘数为:"+str(fact(n)))
#
# -*- coding: UTF-8 -*-
def fact(n):
    r = 1
    # for i in range(0, n):
    #     r *= (i + 1)
    while n > 0:
        r *= n
        n -= 1
    return r
if __name__ == '__main__':
    while True:
        n=int(input("请输入要求的阶乘数:"))
        print("您所求阶乘数为:"+str(fact(n)))

效果:

37.png

解析:此方法与方法二异曲同工之妙,只是s=n*n-1*...*2*1,哈哈哈,甚是有趣。

4、第四种方法

代码:

def inner_fact(n, m):
    if m == n:
        return n
    return m*inner_fact(n, m+1)
def fact(n):
    return inner_fact(n,1)
if __name__ == '__main__':
    while True:
        n=int(input("请输入要求的阶乘数:"))
        print("您所求阶乘数为:"+str(fact(n)))

效果:

38、.png

解析:

此方法使用函数调用子函数来循环计算,思路与上面两种一致,但看起来稍显复杂。

5、第五种方法

代码:

def inner_fact(n, r):
    if n == 1:
        return r
    return inner_fact(n-1, r*n)
def fact(n):
    return inner_fact(n, 1)
if __name__ == '__main__':
    while True:
        n=int(input("请输入要求的阶乘数:"))
        print("您所求阶乘数为:"+str(fact(n)))

效果:

38、.png 解析:此方法是第三种方法的变式,只不过是在函数中进行循环判断。

相关文章
|
1月前
|
算法 索引 Python
使用Python实现PageRank计算
使用Python实现PageRank计算
|
8天前
|
Python Serverless API
Python风险价值计算投资组合VaR、期望损失ES
Python风险价值计算投资组合VaR、期望损失ES
23 0
Python风险价值计算投资组合VaR、期望损失ES
|
18天前
|
算法 Python
78: 计算生日是星期几(python)
78: 计算生日是星期几(python)
|
1月前
|
Python
Python函数之计算规则图形的面积
Python函数之计算规则图形的面积
15 0
|
1月前
|
Python
Python小技巧:计算素数个数
Python小技巧:计算素数个数
|
1月前
|
机器学习/深度学习 人工智能 BI
Python计算余弦相似度
Python计算余弦相似度
|
1月前
|
索引 Python
Python阶乘计算
Python阶乘计算
|
1月前
|
存储 Python
Python计算三角形的面积
Python计算三角形的面积
|
1月前
|
数据挖掘 Python
Python计算平均值
Python计算平均值
|
3月前
|
算法 Python Java
Python每日一练(20230426) 删除重复字符、颜色分类、计算圆周率
Python每日一练(20230426) 删除重复字符、颜色分类、计算圆周率
39 0
Python每日一练(20230426) 删除重复字符、颜色分类、计算圆周率

热门文章

最新文章