首页 > 编程语言 >Python-7递归函数

Python-7递归函数

时间:2023-05-30 16:33:05浏览次数:45  
标签:递归 递归函数 Python recursion print rec 栈帧

1.递归函数:自己调用自己,有来有回,一去一回

"""
-*- coding: utf-8 -*-
@FileName: recursion.py
@Software: PyCharm
@Time    : 2023/5/10 16:04
@Author  : Panda
"""


# 递归函数:recursion,自己调用自己,有来有回,一去一回
def recursion(n):
    print("未调用前 {}".format(n))
    if n > 0:
        recursion(n - 1)
    print("======== {}".format(n))


recursion(5)
# Output: 5 4 3 2 1 0 0 1 2 3 4 5

2.递归总结:每次调用函数时,都要单独再内存中开辟空间,叫做栈帧空间,用于运行函数中的代码

      ①递归实际上是不停开辟栈帧空间和释放的过程,开辟就是去的过程,释放就是回的过程

      ②递归条件:1.当最后一层栈帧空间执行结束的时候,触发归的过程

            2.当遇到return返回值的时候,终止当前函数,触发归的过程

      ③递归不能无限开辟空间,可能造成内存溢出,溢屏死机的情况,所以一定要有跳出条件(如果递归太大,不使用)

      ④开辟的栈帧空间,数据是彼此独立不共享的。

"""
-*- coding: utf-8 -*-
@FileName: recursion.py
@Software: PyCharm
@Time    : 2023/5/10 16:04
@Author  : Panda
"""

def rec():
    rec()
rec()
# Output: RecursionError: maximum recursion depth exceeded:
# # [Previous line repeated 983 more times],最大默认不超过1000层,根据每个电脑的配置层数都不一样。

# 递归算阶乘
"""一般方法"""
n = 5
total = 1
for i in range(n, 0, -1):  # range函数 左闭右开
    total *= i
print(total)
# Output: 120

"""递归"""
def classes(n, values):
    if n <= 1:
        return values
    return classes(n-1, n * values)
print(classes(5, 1))
# Output: 120

# 保护需要的参数值,将参数值隐藏起来,防止被篡改
def outer(n):
    def classes(n, values=1):
        if n <= 1:
            return values
        return classes(n-1, n * values)
    return classes(n)  # 如果是return classes 则是闭包,此处是返回值,为了隐藏参数值
print(outer(6))
# Output: 720

# 递归计算斐波那契数列第几项为多少
def feibo(n):
    if n == 1 or n== 2:
        return 1
    return feibo(n - 1) + feibo(n - 2)
print(feibo(6))

3.递归的详解:很多人都不知道递归到底怎么递归,首先,递归的核心是有递有归,需要分开看,每一次的递归都要有回才行。(每一步的走向:以第一个例子为主)

 

标签:递归,递归函数,Python,recursion,print,rec,栈帧
From: https://www.cnblogs.com/future-panda/p/17388878.html

相关文章

  • 如何用ChatGPT学Python
    大家好,欢迎来到Crossin的编程教室!关于ChatGPT的能力,大家想必都已听说,很多同学应该都亲自体验过了。其在自然语言处理方面的出色表现,绝对是颠覆了之前大众对人工智能的印象但ChatGPT的能力还远不止对于语言文字的处理,它甚至可以对代码进行理解和生成,这有赖于它丰富的知识库和背......
  • python 装饰器
    一、核心思想在不改变被装饰对象内部代码和原有调用方式的基础之上在添加额外的功能二、装饰器的实现过程根据实际需要,一步一步满足需求,完成对装饰器的理解1、简易版本给index函数添加统计执行时间的功能importtimedefindex():time.sleep(3)print('frominde......
  • python selenium web网站登录缺口图片验证码识别
    deflogin():driver=webdriver.Chrome("browser_driver/chromedriver.exe")driver.get("http://xxxxxx/#/login")driver.maximize_window()sleep(1)driver.find_element(By.CSS_SELECTOR,'[placeholder="请输入手机号&qu......
  • python
    静态方法:需在类成员函数前面加上@staticmethod标记符,以表示下面的成员函数是静态函数。使用静态方法的好处是,不需要定义实例即可使用这个方法。另外,多个实例共享此静态方法。classPerson:grade=1def__init__(self,name):self.name=name......
  • Python excejs 执行js文件的时候 报编码错误的问题
    问题执行js的时候报图中的编码错误,直接执行js文件时能正常编译,在网上未找到关于这个问题的文章头疼了好久最终在各位大佬的帮助下解决了问题,便记录了下来:解决办法:一、修改报错文件subprocess.py中的encoding编码:encoding=None--->encoding='utf-8'二、在引包的时......
  • 【爬虫+数据清洗+可视化】用Python分析“淄博烧烤“的评论数据
    目录一、背景介绍二、爬虫代码2.1展示爬取结果2.2爬虫代码讲解三、可视化代码3.1读取数据3.2数据清洗3.3可视化3.3.1IP属地分析-柱形图3.3.2评论时间分析-折线图3.3.3点赞数分布-箱线图3.3.4评论内容-情感分布饼图3.3.5评论内容-词云图四、技术总结五、演示视频六、完整......
  • python日期和时间
     1、获得当前时间#!/usr/bin/python#-*-coding:UTF-8-*-importtimelocaltime=time.localtime(time.time())print"本地时间为:",localtime2、获得格式化时间可以根据需求选取各种格式,但是最简单的获取可读的时间模式的函数是asctime():#!/usr/bin/pytho......
  • Python 读取图片 转 base64 并生成 JSON
    Python读取图片转base64并生成JSONimportjsonimportbase64img_path=r'D:\OpenSource\PaddlePaddle\PaddleOCR\images\005.jpeg';withopen(img_path,'rb')asfile:image_data1=file.read()image=base64.b64encode(image_data1).de......
  • 【Python】将中文字符写入json文件
    ensure_asciiimportjsondict1={'name':'时间','data':['2023-04-1305:00']},{'name':'雨量mm/h','data':['0.0000']},{'name':'温度℃','data':[&......
  • python爬虫 requests访问http网站之443报错(ssl验证)
    报错信息:urllib3.exceptions.MaxRetryError:HTTPSConnectionPool(host='ssr4.scrape.center',port=443):Maxretriesexceededwithurl:/page/1(CausedbySSLError(SSLCertVerificationError(1,'[SSL:CERTIFICATE_VERIFY_FAILED]certificateverifyfa......