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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 笔记

前言


       最近在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 解析:此方法是第三种方法的变式,只不过是在函数中进行循环判断。

相关文章
|
2月前
|
Python
【10月更文挑战第10天】「Mac上学Python 19」小学奥数篇5 - 圆和矩形的面积计算
本篇将通过 Python 和 Cangjie 双语解决简单的几何问题:计算圆的面积和矩形的面积。通过这道题,学生将掌握如何使用公式解决几何问题,并学会用编程实现数学公式。
165 60
|
8天前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
33 18
|
11天前
|
Python
使用Python计算字符串的SHA-256散列值
使用Python计算字符串的SHA-256散列值
19 7
|
1月前
|
机器学习/深度学习 算法 编译器
Python程序到计算图一键转化,详解清华开源深度学习编译器MagPy
【10月更文挑战第26天】MagPy是一款由清华大学研发的开源深度学习编译器,可将Python程序一键转化为计算图,简化模型构建和优化过程。它支持多种深度学习框架,具备自动化、灵活性、优化性能好和易于扩展等特点,适用于模型构建、迁移、部署及教学研究。尽管MagPy具有诸多优势,但在算子支持、优化策略等方面仍面临挑战。
69 3
|
2月前
|
Python
【10月更文挑战第15天】「Mac上学Python 26」小学奥数篇12 - 图形变换与坐标计算
本篇将通过 Python 和 Cangjie 双语实现图形变换与坐标计算。这个题目帮助学生理解平面几何中的旋转、平移和对称变换,并学会用编程实现坐标变化。
66 1
|
2月前
|
机器学习/深度学习 移动开发 Python
【10月更文挑战第11天】「Mac上学Python 22」小学奥数篇8 - 排列组合计算
本篇将通过 Python 和 Cangjie 双语讲解如何计算排列与组合。这道题目旨在让学生学会使用排列组合公式解决实际问题,并加深对数学知识和编程逻辑的理解。
65 4
|
2月前
|
数据可视化 Python
【10月更文挑战第12天】「Mac上学Python 23」小学奥数篇9 - 基础概率计算
本篇将通过 Python 和 Cangjie 双语实现基础概率的计算,帮助学生学习如何解决简单的概率问题,并培养逻辑推理和编程思维。
53 1
|
机器学习/深度学习 Python
ZZULIOJ-1089,阶乘的最高位(Python)
ZZULIOJ-1089,阶乘的最高位(Python)
|
9天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
7天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。