iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >深入理解python函数递归和生成器
  • 161
分享到

深入理解python函数递归和生成器

递归生成器函数 2022-06-04 19:06:29 161人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

一、什么是递归 如果函数包含了对其自身的调用,该函数就是递归的。递归做为一种算法在程序设计语言中广泛应用,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就

一、什么是递归

如果函数包含了对其自身的调用,该函数就是递归的。递归做为一种算法在程序设计语言中广泛应用,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。例如,要计算1-9的9位数字的乘积,直观的算法是1*2*3*4*5*6*7*8*9,如果要计算1-10000的乘积,直观的算法就难于实现出,而递归就可以很简单的实现。请看示例:


def fact(n):#计算给定数字到一的乘积
   if n<=1:
     return 1
   else:
     return n * fact(n-1) 
print (fact(7))

结果为:5040

下面我们用示例来看看递归的执行过程:


def calc(n):
   print(n)
   if n/2 > 1:
     res = calc(n/2)
   return n
 calc(8)

结果为:


8
4.0
2.0

再看这一个示例:


def calc(n):
  print(n)
  if n/2 > 1:
    res = calc(n/2)
    print('res:',res)
  print("N:",n)
  return n
calc(8)

结果为:


8
4.0
2.0
N: 2.0
res: 2.0
N: 4.0
res: 4.0
N: 8

二、生成器

生成器是一个带 yield 语句的函数。一个函数或者子 程序只返回一次,但一个生成器能暂停执行并返回一个中间的结果,返 回一个值给调用者并暂停执行。当生成器的 next()方法被调用的时候,它会准确地从离开地方继续

下面看示例:


def func():
  print('11111111')
  yield [1]
  print(2222222222)
  yield 2
  print(3333333333)
  yield 3

ret=func()
r1=ret.__next__()
print(r1)
r2=ret.__next__()
print(r2)
r3=ret.__next__()
print(r3)

结果为:


11111111
[1]
2222222222
2
3333333333
3

由于 python 的 for 循环有 next()调用和对 StopIteration 的处理, 使用一个 for 循环而不是手 动迭代穿过一个生成器(或者那种事物的迭代器)总是要简洁漂亮得多。例:


def func():
  print('11111111')
  yield [1]
  print(2222222222)
  yield 2
  print(3333333333)
  yield 3
ret=func()
for i in ret:
  print(i)

结果同前面相同。

这些简单的例子应该让你有点明白生成器是如何工作的。除了 next()来获得下个生成的值,用户 可以将值回送给生成器[send()],在生成器中抛出异常,以及要求生成器退出[close()]

下面是一个展示了这些特性的,简单的例子。


def counter(start_at=0):
  count = start_at
  while True:
    val = (yield count) if val is not None:
    count = val
  else:
    count += 1

生成器带有一个初始化的值,对每次对生成器[next()]调用以 1 累加计数。用户已可以选择重 置这个值,如果他们非常想要用新的值来调用 send()不是调用 next()。这个生成器是永远运行的,所以如果你想要终结它,调用 close()方法。如果我们交互的运行这段代码,会得到如下输出:


>>> count = counter(5)
>>> count.next()
5
>>> count.next()
6
>>> count.send(9)
9
>>> count.next()
10
>>> count.close()
>>> count.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration

以上这篇深入理解Python函数递归和生成器就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 深入理解python函数递归和生成器

本文链接: https://www.lsjlt.com/news/14792.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c语言深入理解函数的递归
    前言:  首先,递归是什么,递归就是在定义函数时,然后在函数里调用这个函数,通俗讲,就是函数自己调用自己。那么递归的好处是什么呢?它能够将复杂的问题,用少量的代码来表示,增加了代码的...
    99+
    2024-04-02
  • python生成器,递归调用
    生成器 什么是生成器:只要在函数体内出现yield关键字,那么再执行函数就不会执行函数代码,会得到一个结果,该结果就是生成器 生成器就是迭代器 yield的功能 yield为我们提供了一种自定义迭代器对象的方法 yield与return的...
    99+
    2023-01-30
    递归 生成器 python
  • 深入剖析Python递归函数的工作原理和实际应用
    深入解析Python递归函数的原理与应用 一、引言递归函数在计算机科学中是一种常见而强大的工具。它允许函数在自身内调用,通过重复调用自身来解决问题。Python作为一门强大的编程语言,其递归函数在处理一些问题时表现出了出色的性能...
    99+
    2024-02-02
    原理 应用
  • C++ 函数递归详解:递归的定义和原理
    递归是一种函数调用自我的编程技术,通过将问题分解成较小问题、设置边界条件和递减问题来实现。以求斐波那契数列为例,递归函数使用边界条件(n ≤ 1)和递减问题(fib(n - 1) + f...
    99+
    2024-05-01
    函数 递归 c++
  • python递归函数详解
    递归函数是指在函数定义中使用函数自身的一种编程技巧。递归函数通常包括两个部分:基本情况和递归情况,基本情况是指函数的结束条件,递归情况是指函数调用自身的情况。递归函数的特点:1、更容易理解和编写,尤其是对于一些问题,如树的遍历、阶乘计算、斐...
    99+
    2023-12-18
    python 递归函数
  • C++ 递归函数在生成函数中的应用?
    递归函数在生成函数中用于通过重复式生成序列。这些函数通过调用自身并解决更小的实例来解决复杂问题。在生成函数中,它们帮助定义序列生成规则,例如生成斐波那契数列或素数列表。递归函数提供了一种...
    99+
    2024-04-23
    c++ 递归函数 质数
  • 生成器send方法,递归,匿名函数,内置
    一,复习 ''' 1.带参装饰器 - 自定义 | wraps def wrap(info) def outer1(func): from functools import wraps @wrap...
    99+
    2023-01-31
    递归 生成器 函数
  • Python函数的递归详解
    目录1.1、递归函数的特点 1.2 递归案例 ----- 计算数字累加 总结 函数调用自身的 编程技巧 称为递归。 1.1、递归函数的特点 特点: 一个函数 内部 调用自己。 ...
    99+
    2024-04-02
  • 深入了解Python递归函数的高级应用与优化技巧
    掌握Python递归函数的高级应用与优化策略 引言:递归函数是一种强大而常用的编程技巧,它能够有效解决问题,简化代码逻辑。然而,递归函数的性能问题常常困扰着程序员。本文将介绍Python中递归函数的高级应用及优化策略,并提供具体...
    99+
    2024-02-03
    高级应用 优化策略
  • C语言深入分析递归函数的实现
    目录一、递归的数学思想二、递归函数三、递归函数设计技巧四、递归函数设计示例一五、递归函数设计示例二六、递归函数设计示例三七、小结一、递归的数学思想 递归是一种数学上分而自治的思想 递...
    99+
    2024-04-02
  • 深入了解JavaScript中递归的理解与实现
    目录前言递归的基本理解实例解析求斐波那契数时间复杂度分析空间复杂度分析执行顺序分析前言 我们在写业务代码的时候,或多或少都会遇到需要使用递归的场景,比如在遍历树形结构时。 本文将通过...
    99+
    2024-04-02
  • Python函数、递归和闭包怎么用
    本篇内容介绍了“Python函数、递归和闭包怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!重新认识函...
    99+
    2024-04-02
  • Python递归函数的原理及应用
    本篇内容主要讲解“Python递归函数的原理及应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python递归函数的原理及应用”吧!一、什么是递归函数在函数内部,可以调用其他函数。如果一个函数...
    99+
    2023-06-15
  • 解决python递归函数及递归次数受到限制的问题
    目录递归函数及递归次数受到限制求和:sum=n+n(n-1)+…+1求阶乘:n!=1x2x3…xn解决问题的办法是修改可递归的次数如何控制递归的次数第一种...
    99+
    2024-04-02
  • 详解Python中递归函数的原理与使用
    目录什么是递归函数递归函数的条件定义一个简单的递归函数代码解析内存栈区堆区死递归尾递归实例什么是递归函数 如果一个函数,可以自己调用自己,那么这个函数就是一个递归函数。 递归,递就是...
    99+
    2024-04-02
  • C++ 函数递归详解:递归调用的形式和实现
    递归是函数自身调用的一种编程技术,在 c++++ 中有两种常见形式:直接递归和间接递归。要实现递归,函数必须满足基线条件和递归调用。实战案例中,利用递归计算阶乘,其基线条件是 n 为 0...
    99+
    2024-05-04
    c++ 递归
  • Python递归和生成器实现斐波那契数列有什么区别
    这篇文章主要讲解了“Python递归和生成器实现斐波那契数列有什么区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python递归和生成器实现斐波那契数列有什么区别”吧!前言斐波那契数列,...
    99+
    2023-06-27
  • 动态网站地图生成:PHP递归函数的应用
    动态网站地图是一个非常有用的工具,可以帮助搜索引擎更好地索引网站的内容,提高网站的可访问性和可发现性。在生成动态网站地图时,我们通常...
    99+
    2024-04-26
    PHP
  • C++ 函数递归详解:递归实现阶乘和斐波那契数列
    递归是函数自我调用的编程技术,分为基线条件和递归调用。使用递归可以实现阶乘,即正整数乘以其所有较小正整数的乘积,和斐波那契数列,即每个数字是前两个数字总和的数列。 C++ 函数递归详解...
    99+
    2024-05-02
    c++ 递归
  • PHP递归函数在网站导航生成中的应用
    在网站导航生成中,PHP递归函数可以帮助我们处理多层级的导航结构,特别是在需要展示不定层级的子菜单时非常有用。递归函数可以遍历整个导...
    99+
    2024-04-26
    PHP
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作