python函数递归怎么理解,Python的递归

  python函数递归怎么理解,Python的递归

  1、功能执行过程

  (调用函数,保存当前内容,按堆栈函数,创建堆栈框架。执行里面的语句)

  foo1、foo2、foo3和main的函数对象是在全局框架中生成的。(堆栈、先进先出、后进先出)。

  主函数调用

  在main中找到内置函数main to stack,将常量字符串堆栈,调用函数,弹出栈顶。

  在main中,全局函数foo1推栈,推常数100和101,调用函数foo1,创建栈帧。打印函数栈,字符串和变量B和b1栈,调用函数,弹出栈帧,返回值。

  在Main中,全局查找foo2函数进行堆栈,堆栈常数200,调用foo2,创建堆栈框架。FO3函数压栈,变量C引用栈,调用foo3,创建栈帧。Foo3在完成打印函数调用后返回。Foo2响应调用并在执行print后返回值。主foo2调用结束,弹出栈顶,主函数继续执行打印函数调用,弹出栈顶,主函数返回。

  2.递归:当一个函数直接或间接调用自己时就是递归。

  递归需要边界条件,递归前进段和递归返回段。

  递归必须有边界条件。

  当不满足边界时递归前进。

  当满足边界条件时,它递归返回。

  斐波那契数列:

  pre=0

  cur=1

  print(pre,cur,end= )

  n=4

  对于范围内的I(n-1):

  前,当前=当前,前当前

  print(cur,end= )

  定义纤维(n):

  如果n2 else fib(n-1) fib(n-2)则返回1

  对于范围(5)中的I:

  print(fib(i),end= )

  3.递归需求

  递归必须有一个退出条件。递归调用必须执行到这个退出条件。没有退出条件的递归调用是无限调用。

  递归的深度不能太深。

  Python限制了递归调用的深度,以保护解释器。

  如果超过递归调用深度,将引发异常。

  4.递归的性能

  循环稍微复杂一点,但只要不是无限循环,就可以迭代多次,直到计算出结果。

  改进。左边的fib函数类似于loop的思想。

  参数n是一个边界条件,按n计数。

  最后一个计算结果作为下一个结果的实际自变量。

  导入日期时间

  n=35

  start=datetime.datetime.now()

  定义纤维(n):

  如果n2 else fib(n-1) fib(n-1)则返回1

  对于范围内的I(n):

  print(fib(i),end= )

  =(datetime . datetime . now()-start)。总计_秒()

  打印(增量)

  效率低。

  pre=0

  cur=1

  print(pre,cur,end= )

  定义纤维(n,pre=0,cur=1):

  前,当前=当前,前当前

  print(cur,end= )

  如果n==2:

  返回

  光纤(n-1,前置,后置)

  印刷(纤维(5))

  #斐波那契数列的改进

  左边的fib函数类似于loop的思想。

  参数n是一个边界条件,按n计数。

  最后的计算结果作为函数的实际参数。

  非常高效

  和循环相比,性能差不多,所以递归效率不一定低。但是深度有限。

  5.间接递归

  def foo1():

  二氧化硫()

  定义foo2():

  f1oo()

  foo1()

  该函数本身被另一个函数调用。

  但是,如果构成循环递归调用,那就非常危险了。

  6.递归汇总

  是很自然的表达,符合逻辑思维。

  运行效率比较低,所以每次调用函数都要打开一个堆栈框架。

  递归有深度限制。如果递归层次太深,函数反复压栈,栈内存很快就会溢出。

  如果递归次数有限,可以使用递归调用或循环替换。循环代码略复杂,但只要不是无限循环,就可以多次迭代,直到计算出结果。

  大多数递归可以通过循环来实现。

  即使代码很简单,也可以不用递归来使用。

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

留言与评论(共有 条评论)
   
验证码: