当前位置: 首页 > news >正文

python - 递归函数

递归函数

什么是递归

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数

  1. 递归函数必须有一个明确的结束条件
  2. 每进入更深一层的递归时,问题规模相对于上一次递归都应减少
  3. 相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)
  4. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)

看个例子,比如我们用循环来实现叠加:

def sum1(n):sum = 0for i in range(1,n + 1):sum += ireturn sum

如果用递归来实现的话

def sum2(n):if n > 0:return n + sum2(n - 1)else:return 0

看这个例子大概能理解递归函数是什么,怎么写了,那递归函数有什么有缺点呢

递归函数的优缺点

首先,优点:定义简单,逻辑清晰
理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
缺点: 使用时需要注意防止栈溢出
在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

http://www.lryc.cn/news/42151.html

相关文章:

  • ring_log环形日志-6M缓冲区_proc接口
  • Linux内核进程管理几种CPU调度策略
  • SpringBoot整合Flink(施耐德PLC物联网信息采集)
  • DFS(深度优先搜索)和BFS(宽度优先搜索)
  • Redis缓存穿透、击穿、雪崩问题及解决方法
  • HAL库 STM32 串口通信
  • 2023-第十四届蓝桥杯冲刺计划!
  • 内网渗透基础知识
  • 鸟哥的Linux私房菜 正则表示法与文件格式化处理
  • 1630.等差子数组
  • CSS 属性计算过程
  • ThinkPHP02:路由
  • 制作简单进销存管理系统(C#)
  • css总结9(过渡和2D变换)
  • SpringBoot 结合RabbitMQ与Redis实现商品的并发下单【SpringBoot系列12】
  • 【python进阶】序列切片还能这么用?切片的强大比你了解的多太多
  • [数据结构]直接插入排序、希尔排序
  • CNN、LeNet、AlexNet、VGG、GoogLeNet、RCNN、Fast RCNN、Faster RCNN、YOLO、YOLOv2、SSD等的关系
  • IO-day1-(fscanf、fprintf.........)
  • C++类和对象(上篇)
  • 解决Xshell无法连接Kali Linux 2020.1(2019.3)版本
  • 项目文章 | 缓解高胆固醇血症 ,浒苔多糖如何相助?
  • Linux使用宝塔面板搭建网站,并内网穿透实现公网访问
  • 基于深度学习方法与张量方法的图像去噪相关研究
  • Java基础知识之HashMap的使用
  • 面试--每日一经
  • JavaSE进阶之(十六)枚举
  • 全同态加密:TFHE
  • 【计算机二级】综合题目
  • 初识Kafka