递归(Recursion)

一、递归

递归:通过函数体来进行的循环

汇编:它没有所谓的循环嵌套这一说,你之前有一段指令写在什么地方,你不断的跳到之前的指令的地方去执行那条指令,这就是递归。

  1. 从前有个山
  2. 山里有个庙
  3. 庙里有个和尚讲故事
  4. 返回1

二、盗梦空间

  • 向下进入不通梦境中;向上又回到原来一层
  • 通过声音同步回到上一层
  • 每一层的环境和周围的人都是一份拷贝、主角等几个人穿越不通的梦境(发生和携带变化)

计算 n!

n! = 1 * 2 * 3 * ... * n

def Factorial(n):if n <= 1 :return 1return n * Factorial(n - 1)

三、递归-代码模板

  1. 终结条件(terminator)
  2. 处理当前层逻辑(current level logic)
  3. 下探到下一层(drill down)
  4. 清理当前层(reverse)

C/C++模版:

void recursion(int level, int param) { // recursion terminatorif (level > MAX_LEVEL) { // 一、递归终结条件// process result return ; }// process current logic process(level, param);  // 二、处理当前层逻辑// drill down recursion(level + 1, param);// 三、下探到下一层// reverse the current level status if needed // 四、清理当前层
}

Java模版:

// Java
public void recur(int level, int param) { // terminator if (level > MAX_LEVEL) { // process result return; }// process current logic process(level, param); // drill down recur(level: level + 1, newParam); // restore current status 
}  

Python模版:

def recursion(level, param1, param2, ...): # recursion terminator if level > MAX_LEVEL: process_result return # process logic in current level process(level, data...) # drill down self.recursion(level + 1, p1, ...) # reverse the current level status if needed

JavaScript 模版:

const recursion = (level, params) =>{// recursion terminatorif(level > MAX_LEVEL){process_resultreturn }// process current levelprocess(level, params)//drill downrecursion(level+1, params)//clean current level status if needed}

四、思维要点

  1. 不要人肉进行递归(最大误区) 刚开始学,可以把状态树画出来。到后面了直接看函数本身开始写即可。
  2. 找到最近最简方法,将其拆解成可重复解决的问题(重复子问题)
  3. 数学归纳法思维。

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

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

相关文章

智慧公厕!高科技手段提升城市品质与形象

近年来&#xff0c;随着科技的不断进步&#xff0c;智慧公厕正以其独特的功能和对公共厕所全方位的信息化和数字化&#xff0c;成为智慧城市建设中的重要一环&#xff0c;悄然崭露头角。如广州中期科技有限公司自主研发的智慧公厕管理系统&#xff0c;借助于厕位监测、环境监测…

What is `@RequestMapping` does?

在SpringMVC框架中&#xff0c;RequestMapping 用于映射HTTP请求到控制器类或控制器类中方法。 这个注解可以应用在类级别或方法级别上。 使用样例 包含路径变量和HTTP方法&#xff1a; Controller RequestMapping("/api/v1") public class MyApiController {Get…

【TensorRT】DeviceToHost同步与异步拷贝的区别及带来的问题

cudaMemcpy与cudaMemcpyAsync的区别与问题 cudaMemcpy与cudaMemcpyAsync的区别一、认识stream流二、tensorRT推理的常规流程三、遇到的问题四、引用与参考文献 cudaMemcpy与cudaMemcpyAsync的区别 一、认识stream流 在cuda中&#xff0c;一个stream是由主机代码发布的一系列在…

数据结构期末复习(C语言版)

一、绪论 1.数据结构的术语 数据&#xff1a;所有能输入计算机并被计算机程序处理的符号的总称&#xff1b;数据元素&#xff1a;数据的基本单位&#xff1b;数据项&#xff1a;组成数据元素的、有独立含义的、不可分割的最小单位&#xff1b;数据对象&#xff1a;是性质相同…

免费chartGPT网站汇总

https://s.suolj.com - &#xff08;支持文心、科大讯飞、智谱等国内大语言模型&#xff0c;Midjourney绘画、语音对讲、聊天插件&#xff09;国内可以直连&#xff0c;响应速度很快 很稳定 https://seboai.github.io - 国内可以直连&#xff0c;响应速度很快 很稳定 http://gp…

kotlin的泛型浅析

在Kotlin中&#xff0c;泛型是一种强大的编程概念&#xff0c;它允许你编写更加灵活和可重用的代码&#xff0c;同时提高类型安全性。Kotlin的泛型系统与Java的相似&#xff0c;但有一些更强大的特性。以下是关于Kotlin泛型的一些重要概念和用法&#xff1a; 1. 基本概念&…

数据结构学习 jz44 数字序列中某一位的数字

关键词&#xff1a;找规律 数学 题目&#xff1a;LCR 163. 找到第 k 位数字 虽然做出来了但是做了十万年&#xff0c;我是猪。主要还是找到准确的规律。 思路&#xff1a; //找规律 //0-9 占了10个位置 //10-99 占了90*2个位置 //100-999 占了900*3个位置 //1000-9999 占了90…

优思学院|质量管理五大工具和七大手法要点总结|2024

在现代企业管理中&#xff0c;质量管理是核心竞争力的重要组成部分。它不仅关系到产品的品质&#xff0c;更直接影响到企业的市场信誉和经济效益。本文将深入探讨质量管理中的五大工具及七大手法&#xff0c;这些工具和手法都贯穿了六西格玛DMAIC五步的方法论之中&#xff0c;是…

主流图片压缩格式

主流图片压缩格式主要分为两类&#xff1a;有损压缩和无损压缩。这些格式根据不同的应用场景和需求被广泛使用。 下面是一些常见的图片压缩格式&#xff1a; 有损压缩格式 JPEG (Joint Photographic Experts Group): 最常见的图片格式之一&#xff0c;广泛用于网页图像、摄影和…

「JavaSE」类和对象2

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;快来卷Java啦 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 类和对象2 &#x1f349;匿名对象&#x1f349;关键字static&#x1f34c;static修饰成员变量&#x1f34c;static修饰成员方法&…

如何正确使用数据库的读写分离

本文已收录至我的个人网站&#xff1a;程序员波特&#xff0c;主要记录Java相关技术系列教程&#xff0c;共享电子书、Java学习路线、视频教程、简历模板和面试题等学习资源&#xff0c;让想要学习的你&#xff0c;不再迷茫。 背景 在应用系统发展的初期&#xff0c;我们并不知…

uniapp使用Android Studio离线打包

环境准备 Android Studio&#xff1a; 下载地址APP离线SDK下载&#xff1a; 下载地址; 目前我使用得是“Android-SDK3.8.7.81902_20230704”&#xff1b;需要与hbuider版本配套使用。Appkey: 参考我 以上三步准备好后&#xff0c;进行接下来的不住&#xff1a; 准备工程 导…

SpringCloud Config配置中心详解及环境搭建

前言 我们之前介绍并且搭建过eureka、zuul、hystrix组件。本节介绍的config是SpringCloud五大组件的最后一个&#xff0c;还有一个是Ribbon ----- 客服端负载均衡&#xff0c;之前我们有简单介绍过☞Eureka、Nacos注册中心及负载均衡原理&#xff0c;直接使用注解LoadBalanced…

统计学习 复习(知识点+习题)

复习资料&#xff1a;https://github.com/RuijieZhu94/StatisticalLearning_USTC 第一章 线性回归 1. From one to two 最小二乘 课后题 有偏/无偏估计 加权最小二乘 2. Regularization 线性回归&#xff08;二维情况&#xff09; 求解有约束优化问题 正则化最小加权二乘…

MySQL数据库SQL优化详解

MySQL数据库SQL优化是一个涵盖广泛的主题&#xff0c;涉及索引、查询结构、数据类型选择、存储引擎、事务处理等多个方面。以下是一些关键的SQL优化策略和技巧&#xff1a; 1. 索引优化 创建合适的索引&#xff1a;对经常出现在 WHERE、JOIN 条件、ORDER BY 和 GROUP BY 子句…

ByConity 社区回顾|ByConity 和开发者们一起展望未来,携手共进!

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 新年伊始&#xff0c;我们想在这里感谢一群 ByConity 社区的小伙伴们。 正是因为有社区的开发者的支持&#xff0c;截止到 2023 年底&#xff0c;ByConity GitHub …

Python 格式化输出:精确控制你的数据表示

目录 旧式的 % 运算符&#xff08;不推荐&#xff09; str.format() 方法 位置和关键字参数&#xff1a; 格式化数字&#xff1a; f-string 表达式和函数调用&#xff1a; 格式化数字&#xff1a; 格式规范的微调 &#xff08;核心&#xff09; 对齐字符串 填充字符 …

2023年全国职业院校技能大赛软件测试赛题—单元测试卷⑥

单元测试 一、任务要求 题目1&#xff1a;根据下列流程图编写程序实现相应分析处理并显示结果。返回结果“ax&#xff1a;”&#xff08;x为2、3或4&#xff09;&#xff1b;其中变量x、y均须为整型。编写程序代码&#xff0c;使用JUnit框架编写测试类对编写的程序代码进行测试…

Java基础 - 黑马

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…

第二十四章 $ZF Callout 快速参考 - $ZF()调用iriszf库

文章目录 第二十四章 $ZF Callout 快速参考 - $ZF()调用iriszf库$ZF()调用iriszf库$ZF() $ZF(-3): Call by Name$ZF(-3) 第二十四章 $ZF Callout 快速参考 - $ZF()调用iriszf库 $ZF()调用iriszf库 如果调用$ZF()时不带负数参数(例如&#xff0c;$ZF("myFunction "&…