“递归三要素”寻踪(浅析递归“精典”框架,领略递归优雅秀气;看到有“递归算法优化”的操作,余试剖之)

news2024/12/23 23:46:20

浅析递归“精典”框架,领略递归优雅秀气。看到有“递归算法优化”的操作,余试剖之。


【学习的细节是欢悦的历程】

  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……

    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室
等风来,不如追风去……

【学习的细节是欢悦的历程】

  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……

    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室
等风来,不如追风去……


浅析递归“精典”框架,领略递归优雅秀气
“递归三要素”寻踪
(看到有“递归算法优化”的操作,余试剖之。)


本笔记正在编辑……

请您期待她长成的样子!

本文质量分:

90
本文地址: https://blog.csdn.net/m0_57158496/article/details/博文 ID

CSDN质量分查询入口:http://www.csdn.net/qc


目 录

  • ◆ “递归三要素”寻踪
    • 1、“递归要素”概念
      • 1.1 百科词条中的“递归要素”
      • 1.2 题目中的“递归要素”
      • 1.3 博文中的“递归要素”
    • 2、递归的“经典”案例
      • 2.1 阶乘
      • 2.2 裴波拉契数列
      • 2.3 整数序列求和
    • 3、递归的“算法优化”
      • 3.1 “算法优化递归”
      • 3.2 循环改写递归
    • 4、完整源码


◆ “递归三要素”寻踪


1、“递归要素”概念


1.1 百科词条中的“递归要素”

递归百科词条描述:

  “递归”是程序调用自身的编程技巧。
  程序调用自身的编程技巧称为递归( recursion )。递归作为一种算法在程序设计语言中广泛应用。
  一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。
  递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。

  一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

(点击递归百科词条蓝色文字跳转,了解更多)



回页目录

1.2 题目中的“递归要素”


  • 一、选择题

  • 递归三要素包括(   )
     A. 递归前进段  B. 递归中间段
     C. 递归出口  D. 递归返回段
    答案: A、C、D
  • 二、填空题

  • 递归的要素:________的递归的重要组成;________,它保证递归能在________的计算后得出结果,而不会产生________的情况。

    【解析】 本题考查递归思想。
    程序调用自身的编程技巧称为递归(recursion)。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。递推关系是递归的重要组成;边界条件,她保证递归能在有限的计算后得出结果,而不会产生无限循环的情况。

    解答
    递推关系、边界条件、有限、无限循环
    ----=== 以上题目来自“夸克搜题” ===----

    回页目录

    1.3 博文中的“递归要素”


    1、确定递归函数的参数和返回值
      确定递归过程中需要处理的参数,明确每次递归的返回值,进而确定递归函数的返回类型。
    2、确定递归终止条件(即函数 return 的出口)
      终止条件写的不对,操作系统的内存栈一定会溢出,毕竟递归深度也是有限制的( Python 3.11 的递归深度限制默认是 1000 ,可以在程序中用指令重置)
    3、确定单层递归的逻辑
      明确每次递归要进行什么操作。

    博文地址:https://blog.csdn.net/weixin_44484715/article/details/113461398

    第一要素:明确函数作用

    第二要素:递归结束条件

    第三要素:函数等价关系

    博文地址:https://blog.csdn.net/feng8403000/article/details/121797194

    第一要素:明确你这个函数想要干什么

    第二要素:寻找递归结束条件
      所谓递归,就是会在函数内部代码中,调用这个函数本身。所以,我们必须要找出递归的结束条件。不然的话,会一直调用自己,进入“无限循环”的无底洞。也就是说,我们需要找出当参数为啥时,递归结束,然后返回结果。请注意,这个时候我们必须可以根据这个参数的值,能够直接知道函数的结果是什么。(只要你觉得参数是什么时,你能够直接知道函数的结果,那么你就可以把这个参数作为结束的条件)

    第三要素:找出函数的等价关系式
      所我们要不断缩小参数的范围,缩小之后,我们可以通过一些辅助的变量或者操作,使原函数的结果不变。

    博文地址:https://blog.csdn.net/weixin_42112224/article/details/119416330


    回页目录

    2、递归的“经典”案例


      递归之要素,即是递归之特征。程序有其特征,才是“递归”;“项目”有其特征,才适用“递归算法”。
      据其特征要素,编排递归算法之代码,事半功倍减少差错之 bug 出现机率,轻松愉悦。下面我将用“阶乘”、“裴波拉契数列”和“正整数序列求和”三个递归“经典案例”浅析递归代码“生成”步骤,让我们共识之。

    2.1 阶乘


      
    
    
    
    


    回页目录

    2.2 裴波拉契数列


      
    
    
    
    


    回页目录

    2.3 整数序列求和


      
    
    
    
    


    回页目录

    3、递归的“算法优化”


      

    3.1 “算法优化递归”


      
    
    
    
    


    回页目录

    3.2 循环改写递归


      
    
    
    
    


    回页目录

    4、完整源码

    (源码较长,点此跳过源码)

    
    
    

    回页首

    上一篇:  找出 1~1000中的所有完美数(再次练习查找完美数,找出 1-1000 中的所有完美数)
    下一篇: 

    我的HOT博:

      本次共计收集 195 篇博文笔记信息,总阅读量 31.65w,平均阅读量 1623。已生成 20 篇阅读量不小于 3000 的博文笔记索引链接。数据采集于 2023-04-25 05:20:28 完成,用时 4 分 36.51 秒。


    1. 让QQ群昵称色变的神奇代码
      ( 53234 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/122566500
      点赞:22   踩 :0  收藏:74  打赏:0  评论:16
      本篇博文笔记于 2022-01-18 19:15:08 首发,最晚于 2022-01-20 07:56:47 修改。
    2. ChatGPT国内镜像站初体验:聊天、Python代码生成等
      ( 46594 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/129035387
      点赞:123   踩 :0  收藏:784  打赏:0  评论:73
      本篇博文笔记于 2023-02-14 23:46:33 首发,最晚于 2023-03-22 00:03:44 修改。
    3. pandas 数据类型之 DataFrame
      ( 7944 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/124525814
      点赞:6   踩 :0  收藏:23  打赏:0  评论:0
      本篇博文笔记于 2022-05-01 13:20:17 首发,最晚于 2022-05-08 08:46:13 修改。
    4. 罗马数字转换器|罗马数字生成器
      ( 6345 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/122592047
      点赞:0   踩 :0  收藏:1  打赏:0  评论:0
      本篇博文笔记于 2022-01-19 23:26:42 首发,最晚于 2022-01-21 18:37:46 修改。
    5. Python字符串居中显示
      ( 6018 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/122163023
      点赞:1   踩 :0  收藏:5  打赏:0  评论:1
      本篇博文笔记于 2021-12-26 23:35:29 发布。
    6. 斐波那契数列的递归实现和for实现
      ( 5276 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/122355295
      点赞:4   踩 :0  收藏:2  打赏:0  评论:8
      本篇博文笔记于 2022-01-06 23:27:40 发布。
    7. 练习:字符串统计(坑:f‘string‘报错)
      ( 4851 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/121723096
      点赞:0   踩 :0  收藏:1  打赏:0  评论:0
      本篇博文笔记于 2021-12-04 22:54:29 发布。
    8. 个人信息提取(字符串)
      ( 4666 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/124244618
      点赞:1   踩 :0  收藏:8  打赏:0  评论:0
      本篇博文笔记于 2022-04-18 11:07:12 首发,最晚于 2022-04-20 13:17:54 修改。
    9. 练习:尼姆游戏(聪明版/傻瓜式•人机对战)
      ( 4565 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/121645399
      点赞:14   踩 :0  收藏:42  打赏:0  评论:0
      本篇博文笔记于 2021-11-30 23:43:17 发布。
    10. 回车符、换行符和回车换行符
      ( 4306 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/123109488
      点赞:0   踩 :0  收藏:2  打赏:0  评论:0
      本篇博文笔记于 2022-02-24 13:10:02 首发,最晚于 2022-02-25 20:07:40 修改。
    11. python清屏
      ( 4190 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/120762101
      点赞:0   踩 :0  收藏:5  打赏:0  评论:0
      本篇博文笔记于 2021-10-14 13:47:21 发布。
    12. 密码强度检测器
      ( 3851 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/121739694
      点赞:1   踩 :0  收藏:4  打赏:0  评论:0
      本篇博文笔记于 2021-12-06 09:08:25 首发,最晚于 2022-11-27 09:39:39 修改。
    13. 罗马数字转换器(用罗马数字构造元素的值取模实现)
      ( 3786 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/122608526
      点赞:0   踩 :0  收藏:0  打赏:0  评论:0
      本篇博文笔记于 2022-01-20 19:38:12 首发,最晚于 2022-01-21 18:32:02 修改。
    14. 练习:班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)
      ( 3514 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/124424935
      点赞:1   踩 :0  收藏:2  打赏:0  评论:0
      本篇博文笔记于 2022-04-26 12:46:25 首发,最晚于 2022-04-27 21:22:07 修改。
    15. 练习:生成100个随机正整数
      ( 3482 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/122558220
      点赞:1   踩 :0  收藏:3  打赏:0  评论:0
      本篇博文笔记于 2022-01-18 13:31:36 首发,最晚于 2022-01-20 07:58:12 修改。
    16. 我的 Python.color() (Python 色彩打印控制)
      ( 3320 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/123194259
      点赞:2   踩 :0  收藏:7  打赏:0  评论:0
      本篇博文笔记于 2022-02-28 22:46:21 首发,最晚于 2022-03-03 10:30:03 修改。
    17. Python列表(list)反序(降序)的7种实现方式
      ( 3311 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/128271700
      点赞:4   踩 :0  收藏:10  打赏:0  评论:8
      本篇博文笔记于 2022-12-11 23:54:15 首发,最晚于 2023-03-20 18:13:55 修改。
    18. 练习:仿真模拟福彩双色球——中500w巨奖到底有多难?跑跑代码就晓得了。
      ( 3176 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/125415626
      点赞:3   踩 :0  收藏:4  打赏:0  评论:3
      本篇博文笔记于 2022-06-22 19:54:20 首发,最晚于 2022-06-23 22:41:33 修改。
    19. 聊天消息敏感词屏蔽系统(字符串替换 str.replace(str1, *) )
      ( 3045 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/124539589
      点赞:3   踩 :0  收藏:3  打赏:0  评论:3
      本篇博文笔记于 2022-05-02 13:02:39 首发,最晚于 2022-05-21 06:10:42 修改。
    20. Linux 脚本文件第一行的特殊注释符(井号和感叹号组合)的含义
      ( 3011 阅读)
      博文地址:https://blog.csdn.net/m0_57158496/article/details/123087606
      点赞:0   踩 :0  收藏:4  打赏:0  评论:3
      本篇博文笔记于 2022-02-23 13:08:07 首发,最晚于 2022-04-04 23:52:38 修改。
    推荐条件 阅读量突破三千
    (更多热博,请点击蓝色文字跳转翻阅)

    回页首


    老齐漫画头像

    精品文章:

    • 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
    • OPP三大特性:封装中的property
    • 通过内置对象理解python'
    • 正则表达式
    • python中“*”的作用
    • Python 完全自学手册
    • 海象运算符
    • Python中的 `!=`与`is not`不同
    • 学习编程的正确方法

    来源:老齐教室


    回页首

    ◆ Python 入门指南【Python 3.6.3】


    好文力荐:

    • 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
    • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
    • 靠谱程序员的好习惯
    • 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归

    CSDN实用技巧博文:

    • 8个好用到爆的Python实用技巧
    • python忽略警告
    • Python代码编写规范
    • Python的docstring规范(说明文档的规范写法)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/462468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

界面交互篇:个人中心页布局样式与逻辑交互开发

微信小程序云开发实战系列-答题积分赛小程序 界面交互篇:个人中心页布局样式与逻辑交互开发 个人中心页效果图 个人中心布局与样式实现 页头布局 在my.wxml中,编写布局代码:

电视盒子什么牌子好?内行力荐五大目前最强的电视盒子

电视盒子什么牌子好是很多人在挑选电视盒子时会纠结的问题,因工作原因我每天都会接触到各种电视盒子,进行拆机维修。这几年发布过很多电视盒子的测评内容,今天我将要分享的是目前最强的电视盒子,对配置有要求的朋友们可以收藏起来…

Ahut周赛1

1.还原AhutOj 如图,位置1和2的最大值是3,位置1可以直接放3,同理,位置5可以直接放5 位置1和位置2的最大值是3,位置2和位置3的最大值是4,位置3和位置4的最大值是4,所以位置2只能取3和4的最小值&am…

学顶教育:注安工程师不同级别考试形式也不同?

注册安全工程师分为三个等级,即:初级(助理)、中级、高级。 其中,中级安全工程师报考者无需先参加初级考试,只要符合中级安全工程师要求即可直接报考。 不符合中级安全工程师注册条件且满足初级申请条件的&…

向量基础个人思维训练_纹理采样边缘做旧效果的推导

之前光照demo的玻璃盒子边缘感觉太锐利了,于是想看看能不能让面的边缘逐渐变黑,这样应该会更接近于真实的拼接效果。 首先,玻璃盒子每个面的纹理采样坐标设定如下: 已知采样坐标范围是(0,0)~(1,1)这个矩形范围&#xff0c…

【代理设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 代理模式(Proxy Pattern)是一种结构型设计模式,用一个类来代理另一个类或几个类的功能。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 延迟初始化(虚拟代理)。如…

Talk预告 | AAAI‘23 Oral 北京大学陈嘉毅:自然条件下基于三维点云的手物联合位姿追踪与重建

本期为TechBeat人工智能社区第488期线上Talk! 北京时间4月6日(周四)20:00,北京大学计算机学院博士——陈嘉毅的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “自然条件下基于三维点云的手物联合位姿追踪与重建”&#xf…

iOS - 内存管理

一、App 内存分布 二、OC对象的内存管理 iOS 中,使用引用计数来管理 OC 对象的内存,新创建的 OC 对象引用计数默认是1,当引用计数减为0,OC对象就会销毁,释放其占用的内存空间。调用 retain 会让 OC 对象的引用计数 1&…

perf生成火焰图

文章目录 1,top发现webserver进程空转情况下CPU占用高达200%2,使用性能分析工具perf来进行分析2.1,抓取采集样本2.2,使用perf简单分析性能数据 3,火焰图3.1,生成火焰图3.2,将生成的.svg文件用浏…

电视盒子哪个好?数码小编盘点2023电视盒子排行榜

随着网络剧的热播,电视机又再度受宠,电视盒子也成为不可缺少的小家电。但面对复杂的参数和品牌型号,挑选时不知道电视盒子哪款最好,小编根据销量和用户评价整理半个月后盘点了电视盒子排行榜前五,对电视盒子哪个好感兴…

python编程课后练习答案:一批书几天能买完,勾股数组,个位数字与十位位数字之和除以10所得余数刚好是其百位,剪刀、石头、布猜拳游戏

一、编程题目 编程题目: 4、已知有一批书共1020本,以后每天都买掉一半还多2本,设计程序求出几天能买完。 5、凡是满足x^2y^2z^2的正整数数组(xYz)就称为勾股数组(如345)。请找出任意一个正整数n以内的所有勾股数组 6、编写代码找出满足下面…

不懂如何搭建Web自动化测试环境?这篇文章教你如何上手

摘要: 本文将介绍如何搭建Web自动化测试环境,使用的工具包括Selenium WebDriver和JUnit。同时,本文还提供了详细的代码示例,帮助读者更好地理解和实践相关的知识。 目录 一、前言 二、环境配置 1.安装JDK 2.安装Eclipse 3.下…

对话AI顶尖大牛周明老师:大模型的机遇和挑战?

Datawhale学习 分享人:周明老师,Datawhale 特邀嘉宾 这次 Datawhale开源学习 特别邀请了周明老师分享: 周明,澜舟科技创始人兼CEO,中国计算机学会 CCF 副理事长、NLP和大模型领域的顶尖大牛。 1991年就从NLP重镇哈工大…

typeScript安装以及typeScript配置

1. 什么是typeScript ? 它强调了 TypeScript 的两个最重要的特性——类型系统、适用于任何规模。 包含js的所有的元素,能运行js代码,支持ES语法,是一种开源、跨平台的编程语言。就是js的超 集。 TypeScript 是添加了类型系统的 JavaScri…

Java并发编程 —— ThreadLocal详解

一、什么是ThreadLocal ThreadLocal用于提供线程内部共享的变量,每个线程在访问ThreadLocal实例的时候都可以获得自己的、独立初始化的变量副本,这样线程间互不干扰,从而避免了线程安全问题。 比如我们知道SimpleDateFormat是线程不安全的&…

LVS负载均衡+keepalived高可用

准备准备五台虚拟机 192.168.255.128 MASTER 192.168.255.134 BACKUP 192.168.255.130 Nginx节点服务器1 192.168.255.131 Nginx节点服务器2 192.168.255.132 客户端验证 一、配置节点服务器 1、配置虚接口lo:0 cd /etc/sysconfig/network-scripts/ cp ifcfg-…

Vue-cli 3.x 脚手架搭建的 Vue 2.x 项目进行 npm install 安装时报错: npm ERR! code 1……

项目场景: 公司以前做过的项目,当时开发环境 npm,node.js 版本和现在都不一样,比较旧了,项目之前是用 Vue-cli 3.x 搭建的,Vue 2.x 写的,当时配套的第三方依赖版本也都很落后了,在近…

有趣有爱有温度!迅镭激光第一季度户外团建活动圆满落幕!

阳春四月,元气复苏 凝心聚力,共享喜悦 迅镭激光第一季度寿星及新人 欢聚常熟蒋巷基地 开启一段美妙的户外团建之旅 无创意不团建!蓝天白云下,队员们在教练的指导下解锁各种花样游戏大玩法,大家密切配合、相互协作,…

Docker | 解决docker 容器中csv文件乱码的情况

问题描述:在Ubuntu docker容器中,打开.csv文件时显示乱码 问题如图 错误分析: 用locale查看所用容器支持的字符集 从输出可以看到,系统使用的是POSIX字符集,POSIX字符集是不支持中韩文的,而UTF-8是支持中…

054:cesium加载WMS规范的影像服务

第054个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中加载WMS规范的影像服务。WebMapServiceImageryProvider提供由 Web 地图服务 (WMS) 服务器托管的平铺图像。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代…