python支持的递归深度,python递归特征

  python支持的递归深度,python递归特征

  递归函数是通过一系列语句直接或间接调用自身的函数。递归在编程中起着重要的作用,在许多情况下,借助递归可以很好地解决问题。主要介绍如何利用可视化来理解递归函数的执行步骤,有需要的可以参考一下。

  00-1010 1.学习目标2。递归调用3。递归可视化3.1海龟库介绍3.1递归绘图

  

目录

  递归函数是通过一系列语句直接或间接调用自身的函数。递归在编程中起着重要的作用,在许多情况下,借助递归可以很好地解决问题。虽然递归可以快速解决一些难题,但由于递归的抽象性,很难掌握。为了更好的理解递归函数背后的思想,本节主要通过可视化来理解递归函数的执行步骤。

  通过本节,您应掌握以下内容:

  提高对递归的理解

  通过可视化理解递归函数背后的思想

  

1.学习目标

  虽然递归可以快速解决一些难题,但由于递归的抽象性,很难掌握。虽然《递归基础》已经讲解了递归的例子,也简单理解了递归的调用过程,但是缺乏具体的认知。本节将对递归调用进行更深入的解释。

  执行递归函数时,每次递归调用都会在内存中创建该函数的新副本。一旦函数调用完成,一些数据将被返回,这个副本将从内存中删除。通常递归方法得到的解看起来很简单,但是要理解和跟踪函数的执行就比较复杂。为了更好地理解,考虑以下寻找斐波那契数列的简单例子:

  def fibo(n):

  如果n==0:

  返回1

  else:

  返回n * fibo(n - 1)

  定义主():

  数字=4

  结果=fibo(数字)

  打印(结果)

  if __name__==__main__:

  主()

  当程序运行到第10行时。当第一次调用fibo()函数时,将为fibo()函数调用创建一个新的活动记录。此时,运行时堆栈上有3个活动记录。然后Python解释器跳转到第2行,其中n指向数字4,如下图所示。n不等于0,所以跳到第5行,其中包含对fibo()的函数调用,这将在运行时堆栈上创建另一个活动记录。重复上述过程,直到n=0。

  请注意,每个递归函数调用都有一个变量n的副本。Activity记录函数范围内的所有局部变量和参数。每次调用一个函数时,都会创建一个新的活动记录,并将局部变量的新副本存储在活动记录中。程序运行过程的调用顺序如下图所示:

  当函数执行到n=0时,fibo()函数返回它的第一个值,它对上一个函数调用返回1。如下图所示,从运行时栈中弹出n=0时函数调用的活动记录(用将图中的活动记录变成灰色来表示)。当函数返回时,活动记录的空间将被回收供以后使用。堆上的影子对象0也被垃圾收集器收集,因为不再有对它的引用。

  在第一个fibo()函数返回后,Python解释器返回到上一个函数调用的第五行。这个语句还包含一个return语句,所以函数再次返回第五行,返回值为1。同样,函数再次返回,但这次值是2。按照上面的过程,直到fibo()函数返回到main()函数的第八行。整个过程如下图所示:

  最后,程序打印执行结果,在第9行后从main()函数返回,在第11行后从模块返回并终止。从上面的例子可以看出,每次递归调用fibo()函数都会创建自己的变量副本。每次调用这个函数时,局部变量和参数都会被复制到相应的活动记录中。当函数调用返回时,相应的活动记录将从运行时堆栈中弹出。这就是递归函数的执行方式。

  

2.递归的调用

  在本节中,我们将使用turtle库递归绘制模式,以提高我们对递归过程的理解。

  

3.递归可视化

  Turtle库属于python的标准库,通常用来画图案。你可以使用这个库来创建一只在画布上移动的乌龟。乌龟爬行的时候会在画布上画线,但是当前的尾巴

  巴抬起时,并不会进行绘制。

  接下来,我们将介绍一些基本的 turtle 绘图函数:

  

  • turtle.penup(): turtle 抬起尾巴,之后的移动并不在图上进行绘制
  • turtle.pendown():turtle 放下尾巴,开始爬行,之后会在图上绘制其行动轨迹
  • turtle.pensize(width):用于改变画笔的宽度
  • turtle.pencolor(color):用于改变画笔颜色
  • turtle.forward(distance):向前移动 distance
  • turtle.back(distance):向后移动 distance

  

  

3.1 递归绘图

  首先通过创建一个简单的递归函数 draw() 来了解 turtle 库,这个递归函数的基本情况为——要画的线长 distance 降为 0;若线长大于 0,就让小乌龟小乌龟向前绘制 distance 个单位距离,然后左转 30 度;递归情况为——缩短后的距离再次调用 draw() 函数。

  

# 导入 turtle 库

  import turtle

  # 创建小乌龟对象

  my_turtle = turtle.Turtle()

  # 创建用户绘制图案的窗口

  window = my_turtle.getscreen()

  def draw(turtle, distance):

      if distance > 0:

          # 小乌龟向前绘制 distance 个单位距离

          turtle.forward(distance)

          # 然后左转 30 度

          turtle.left(30)

          draw(turtle, distance-6)

  draw(my_turtle, 200)

  window.exitonclick()

  接下来,我们使用 turtle 模块绘制分形树。分形树和递归有许多的共同点,是数学中的一个概念,无论放大多少倍观察分形图,总能看到相同的基本形状。

  如果我们定义树为包含向左生长的子树和向右生长的子树的话,就可以根据递归的思想得到分形树:

  

import turtle

  def tree(branch, turtle):

   if branch > 5:

   turtle.forward(branch)

   turtle.right(20)

   tree(branch-15, turtle)

   turtle.left(40)

   tree(branch-10, turtle)

   turtle.right(20)

   turtle.backward(branch)

  my_turtle = turtle.Turtle()

  window = my_turtle.getscreen()

  my_turtle.left(90)

  my_turtle.up()

  my_turtle.backward(300)

  my_turtle.down()

  tree(110, my_turtle)

  window.exitonclick()

  到此这篇关于Python数据结构之递归可视化详解的文章就介绍到这了,更多相关Python递归可视化内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 手机qpython3安装第三方库,qpython安装模块,手机Python编程软件QPython支持第三方库安装详解
  • lambda也是python支持的一种定义函数的方法,lambda用法python
  • lambda也是python支持的一种定义函数的方法,python lambda()
  • python支持面向对象程序设计吗,学python一定要用pycharm吗
  • lambda也是python支持的一种定义函数的方法,python中lambda的作用
  • python支持面向对象的编程技术,python面向对象编程的三大特性
  • python面向对象的编程,python支持面向对象的编程技术
  • python面向对象编程指南,python支持面向对象的编程技术
  • python支持的函数参数类型,python函数的5种参数详解
  • python支持多个操作系统吗,python如何同时运行两个程序
  • python面向对象编程的三大特性,python支持面向对象编程吗
  • Python语言支持编程方式有,python支持什么编程
  • python支持函数重载吗,python的重载是如何实现的
  • python支持函数式编程和什么编程,python语言支持编程方式有函数式编程
  • python后端接口怎么写,python支持接口编程吗
  • 留言与评论(共有 条评论)
       
    验证码: