【我和Python算法的初相遇】——体验递归的可视化篇

这篇具有很好参考价值的文章主要介绍了【我和Python算法的初相遇】——体验递归的可视化篇。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端

🌈个人主页: Aileen_0v0
🔥系列专栏:PYTHON数据结构与算法学习系列专栏
💫"没有罗马,那就自己创造罗马~" 

目录

递归的起源

什么是递归?

 利用递归解决列表求和问题

递归三定律

递归应用-整数转换为任意进制数

递归可视化 

画一个正方形 

画一个五角星 

画一个九边形 

画圆形

画一个等腰三角形 

利用递归画一个螺旋 

利用递归画一颗分形树 

利用递归画一个谢尔平斯基三角形


递归的起源

递归是一种算法,它利用函数的自身调用来解决问题。递归的历史可以追溯到古代的数学家和逻辑学家,如希腊哲学家亚里士多德和印度数学家阿耶尔巴塔。然而,递归算法的实际应用可以追溯到早期的计算机科学,尤其是在20世纪40年代和50年代的计算机发展初期。

在20世纪初,数学家David Hilbert提出了“希尔伯特问题”,其中包括一个著名的问题——哥德尔不完备定理。这个定理表明,任何一个形式化的系统都无法证明自身完备。这导致了一些数学家开始研究递归函数,因为递归函数是一种强大的工具,可以用来刻画数学中的可计算性概念。在20世纪40年代,递归理论被广泛研究,它为计算机科学的发展奠定了基础。

早期计算机(如ENIAC)是通过执行单个指令来执行操作的,因此递归算法在这些机器上的执行效率较低。然而,随着计算机硬件和编程语言的发展,递归算法变得更加普遍和有效。今天,递归算法被广泛用于计算机科学中的许多应用领域,如数据结构设计、图像处理、机器学习和自然语言处理。


什么是递归?

递归是一种解决问题的方法,其精髓在于将问题分解为规模更小的相同问题持续分解,直到问题规模小到可以用非常简单直接的方式来解决。
递归的问题分解方式非常独特,其算法方面的明显特征就是:在算法流程中调用自身
递归为我们提供了一种对复杂问题的优雅解决方案,精妙的递归算法常会出奇简单令人赞叹。

问题:

给定一个列表,返回所有数的和列表中数的个数不定,需要一个循环和一个累加变量来迭代求和

def Listsum(nl):
    sum = 0
    for i in nl:
        sum += i
    return sum

print(Listsum([1,2,3,4]))

 利用递归解决列表求和问题


程序很简单,但假如没有循环语句 ?既不能用for,也不能用while还能对不确定长度的列表求和么?

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端 【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端


递归三定律

1.结束条件

2.向基态前进

3.自己调用自己


递归应用-整数转换为任意进制数

我们用最熟悉的十进制分析下这个问题

十进制有十个不同符号: convString =0123456789"
比十小的整数,转换成十进制
直接查表就可以了: convString[n] 

比十大的整数想办法把比十大的整数拆成一系列比十小的整数,逐个查表
比如七百六十九,拆成七、六、九,查表得到769就可以了

所以,在递归三定律里,我们找到了“,就是小于十的整数本结束条件”

拆解整数的过程就是向“基本结束条件”演进的过程
我们用整数除,和求余数两个计算来
将整数一步步拆开除以“进制基base(// base)对“进制基”求余数 (% base)

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端

#n为转换的数字   base为进制数
def tostring(n,base):
    coverstring = "0123456789"
    if n < base :
        return coverstring[n]
    else:
        return tostring(n // base , base) + coverstring[n % base]
print(tostring(1999,10))

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端


递归可视化 

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端


画一个正方形 

import turtle
t = turtle.Turtle()
#通过四次向右转90度画一个边长为100的正方形
for i in range(4):
    t.forward(100)
    t.right(90)
turtle.done()

 【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端

画一个五角星 

#画五角星
import turtle
t = turtle.Turtle()
t.pencolor("red")
t.pensize(3)
for i in range(5):
    t.forward(100)
    t.right(144)
t.hideturtle()

turtle.done()

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端


画一个九边形 

#画九边形
import turtle
t = turtle.Turtle()
t.pencolor("blue")
t.pensize(10)
for i in range(9):
    t.forward(100)
    t.left(320)
t.hideturtle()
turtle.done()

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端


画圆形

#画圆形
import turtle
t = turtle.Turtle()
t.pencolor("blue")
t.pensize(10)
for i in range(1):
    t.circle(180)
t.hideturtle()
turtle.done()

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端


画一个等腰三角形 

#画等腰三角形
import turtle
t = turtle.Turtle()
t.pencolor("blue")
t.pensize(10)
for i in range(4):
    t.forward(100)
    t.left(120)
t.hideturtle()
turtle.done()

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端


利用递归画一个螺旋 

#内置库,用于画图的模块
import turtle
#实例化turtle对象
my_turtle = turtle.Turtle()
#调用窗口
my_win = turtle.Screen()

def draw_spiral(my_turtle,line_len):
    if line_len > 0:
        # 向当前方向走line_len 个像素
        my_turtle.forward(line_len)
        #箭头向右转90度
        my_turtle.left(90)
        #调用自己
        draw_spiral(my_turtle,line_len - 5)
        #♥这个图告诉我们递归不一定要有返回值
draw_spiral(my_turtle,300)
my_win.exitonclick()

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端


【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端

利用递归画一颗分形树 

def tree(branch_len, t):
    if branch_len > 5:
        t.forward(branch_len)
        t.right(20)
        tree(branch_len-15, t)
        t.left(40)
        tree(branch_len-15, t)
        t.right(20)
        t.backward(branch_len)

import turtle
t = turtle.Turtle()
my_win = turtle.Screen()
t.left(90)
t.up()
t.backward(200)
t.down()
t.color("black")
tree(110,t)
my_win.exitonclick()

 【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端


利用递归画一个谢尔平斯基三角形

#绘制谢尔平斯基三角形的辅助函数
import turtle
def draw_triangle(points , color, my_turtle ):
    my_turtle.fillcolor ( color )
    my_turtle.up()
    my_turtle.goto(points[0][0],points[0][1])
    my_turtle.down()
    my_turtle.begin_fill()
    my_turtle.goto(points[1][0],points [1][1])
    my_turtle.goto(points[2][0],points [2][1])
    my_turtle.goto(points[0][0],points [0][1])
    my_turtle.end_fill()

def get_mid(p1,p2 ):
    return ((p1[0] + p2[0]) / 2 , (p1[1] + p2[1]) / 2)

# 绘制谢尔平斯基三角形
def sierpinski(points, degree, my_turtle):
    colormap = [
        "blue",
        "red",
        "green",
        "white",
        "yellow",
        "violet",
        "orange",
    ]
    draw_triangle(points, colormap[degree], my_turtle)
    if degree > 0:
        sierpinski(
            [
                points[0],
                get_mid(points[0], points[1]),
                get_mid(points[0], points[2]),
            ],
            degree - 1,
            my_turtle,
        )
        sierpinski(
            [
                points[1],
                get_mid(points[0],points[1]),
                get_mid(points[1],points[2]),
            ],
            degree - 1,
            my_turtle,
        )
        sierpinski(
            [
                points[2],
                get_mid(points[2],points[1]),
                get_mid(points[0],points[2]),
            ],
            degree - 1,
            my_turtle,
        )

def main():
    my_turtle = turtle.Turtle()
    my_win = turtle.Screen()
    my_points =  [[-100,-50],[0,100],[100,-50]]
    sierpinski(my_points, 5, my_turtle)
    my_win.exitonclick()

print(main())

 【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端

📝全文总结

本文主要讲解:
    本文主要讲解了递归的历史起源以及使用规则 —— 我们通过递归可以将复杂问题简单化,并且我们还学习了如何通过递归进行进制转换,以及如何通过递归去画出我们想要的图形---螺旋图,分形树,谢尔基三角形。

     今天的干货分享到这里就结束啦!如果觉得文章还可以的话,希望能给个三连支持一下,Aileen的主页还有很多有趣的文章,欢迎小伙伴们前去点评,您的支持就我前进的最大动力!

【我和Python算法的初相遇】——体验递归的可视化篇,数据结构与算法,python,开发语言,数据结构,算法,迭代加深,线性回归,前端文章来源地址https://www.toymoban.com/news/detail-752544.html

到了这里,关于【我和Python算法的初相遇】——体验递归的可视化篇的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络奇遇之旅】:那年我与计算机网络的初相遇

    🎥 屿小夏 : 个人主页 🔥个人专栏 : 计算机网络 🌄 莫道桑榆晚,为霞尚满天! 在信息时代的浪潮中,计算机网络如一座桥梁,将分散在不同地理位置的计算机系统紧密连接,为人们带来前所未有的便利与可能性。这座桥梁不仅实现了硬件和软件资源的共享,还架设了通

    2024年02月05日
    浏览(37)
  • A*算法求解迷宫问题(算法讲解与证明、python实现与可视化)

    目录 一、引入 二、具体细节 1、BFS(Breadth First Search) 2、Dijkstra(Uniform Cost Search) 3、启发式(Heuristic search) 4、A*算法 4.1 算法细节 4.2 A与A*算法 4.3 A*算法证明 4.4 算法过程 三、具体实现 1、实验要求 2、代码实现 四、源代码        当我开始学习该算法时,网上已经有了很

    2023年04月08日
    浏览(37)
  • 【复杂网络建模】——Python可视化重要节点识别(PageRank算法)

    🤵‍♂️ 个人主页:@Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、复杂网络建模 二、建模的算法

    2024年02月06日
    浏览(37)
  • python 房价数据可视化以数据缺失处理、及回归算法

    房价数据为他国地区 使用工具为JupyterLab、python3 用到的包 绘图包:seaborn、matplotlib 数据处理包:numpy、pandas 统计计算包:math、scipy 回归模型包:make_pipeline、 RobustScaler、ElasticNet,Lasso、KernelRidge、GradientBoostingRegresso、xgboost 导入并打印数据 打印特征值、索引列 打印房价相关的

    2024年02月09日
    浏览(31)
  • 递归解析Json,实现生成可视化Tree+快速获取JsonPath

    内部平台的一个小功能点的实现过程,分享给大家: 递归解析Json,可以实现生成可视化Tree+快速获取JsonPath 。 步骤: 1.利用JsonPath读取根,获取JsonObject 2.递归层次遍历JsonObjec,保存结点信息 3.利用zTree展示结点为可视化树,点击对应树的结点即可获取对应结点的JsonPath 示例

    2024年02月08日
    浏览(31)
  • 基于python集成学习算法XGBoost农业数据可视化分析预测系统

    基于python机器学习XGBoost算法农业数据可视化分析预测系统,旨在帮助农民和相关从业者更好地预测农作物产量,以优化农业生产。该系统主要包括四个功能模块。 首先,农作物数据可视化模块利用Echarts、Ajax、Flask、PyMysql技术实现了可视化展示农作物产量相关数据的功能。

    2024年01月21日
    浏览(32)
  • 基于python机器学习XGBoost算法农业数据可视化分析预测系统

    基于python机器学习XGBoost算法农业数据可视化分析预测系统,旨在帮助农民和相关从业者更好地预测农作物产量,以优化农业生产。该系统主要包括四个功能模块。 首先,农作物数据可视化模块利用Echarts、Ajax、Flask、PyMysql技术实现了可视化展示农作物产量相关数据的功能。

    2024年01月21日
    浏览(37)
  • 【数据仓库】FineBI数据可视化使用体验

            FineBI是新一代自助式BI工具,企业客户多,服务范围广.凭借finebi简单流畅的操作,强劲的大数据性能和自助式的分析体验。 1,对个人用户来说, 免费的无限期试用,解锁所有功能,除了限制两个并发访问,个人用户可以尽情的学习调试啦,解锁数据分析的乐趣! 2,

    2024年02月15日
    浏览(27)
  • 信息管理毕设分享(含算法) python大数据房价预测与可视化系统

    # 0 简介 今天学长向大家介绍一个适合作为毕设的项目 毕设分享 python大数据房价预测与可视化系统 项目获取: https://gitee.com/sinonfin/algorithm-sharing 1.需求描述 对于数据挖掘工程师来说,有时候需要抓取地理位置信息,比如统计房子周边基础设施信息,比如医院、公交车站、写

    2024年02月03日
    浏览(33)
  • 智能科学毕设分享(含算法) python大数据房价预测与可视化系统

    # 0 简介 今天学长向大家介绍一个适合作为毕设的项目 毕设分享 python大数据房价预测与可视化系统 项目获取: https://gitee.com/sinonfin/algorithm-sharing 1.需求描述 对于数据挖掘工程师来说,有时候需要抓取地理位置信息,比如统计房子周边基础设施信息,比如医院、公交车站、写

    2024年02月03日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包