递归应用场景和调用机制

原文链接:传送门

递归

迷宫问题(回溯)

img

概念

简单呐的说: 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时让代码变得简洁.

案例-递归调用机制

打印问题

public static void test(int n){if(n>2){test(n-1);}System.out.println("n="+n);
}

哔哩哔哩动画

img

递归调用规则:

  1. 当程序执行到一个方法时,就会开辟一个独立的空间(栈)

    img img img img

阶乘问题

//阶乘问题
public static int factorial(int n) {if (n == 1) {return 1;} else {return factorial(n - 1) * n; // 1 * 2 * 3}
}

斐波那契数列

这个也是可以用这个 递归实现的

经典案例

递归用于解决什么样的问题

  1. 各种数学问题如: 8皇后问题 , 汉诺塔, 阶乘问题, 迷宫问题, 球和篮子的问题(google编程大赛)
  2. 各种算法中也会使用到递归,比如快排,归并排序,二分查找,分治算法等.
  3. 将用栈解决的问题–>第归代码比较简洁

递归需要遵守的重要规则

  1. 执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
  2. 方法的局部变量是独立的,不会相互影响, 比如n变量
  3. 如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据.
  4. 递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError,死龟了:)
  5. 当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。

案例

球和篮子问题

你有几个同样的球,你希望把它放到几个篮子里。每个篮子有相同的容量。给出int 型的baskets,代表篮子的数量。给出int型的 capacity,代表每个篮子的最大容量。给出int型的balls,表示归类到篮子里的球的数量。返回值是把球归类到篮子里的方式的数量。如果不能完全存放到篮子中,无法划分,返回0。 篮子互不同,所有的球相同。因此,如果2个球放到2个篮子里,你可以采用3种方式,即(0, 2), (1, 1), 或 (2, 0)

原文链接:传送门

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

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

相关文章

在vivado里用rtl描述_如何利用Vivado HLS处理许多位准确或任意精度数据类型

我们在设计硬件时,它往往是要求更精确的位宽。例如,一个filter的输入是12位和一个累加器的结果只需要一个最大范围为27位。然而对于硬件设计来说,使用标准的C数据类型会造成硬件成本的浪费。这就会造成我们要使用更多的LUT和寄存器&#xff0…

Spring4.0之四:Meta Annotation(元注解)

Spring框架自2.0开始添加注解的支持,之后的每个版本都增加了更多的注解支持。注解为依赖注入,AOP(如事务)提供了更强大和简便的方式。这也导致你要是用一个相同的注解到许多不同的类中去。这篇文章介绍meta annotation来解决这个问…

八皇后问题分析与Java实现

原文链接:传送门 八皇后问题 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯贝瑟尔于1848年提出:在88格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个…

各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间。尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析、应用开发、释放license收费等等。最…

shell 脚本比较字符串相等_shell脚本--逻辑判断与字符串比较

涉及到比较和判断的时候,要注意整数比较使用-lt,-gt,ge等比较运算符,详情参考:整数比较文件测试使用 -d, -f, -x等运算发,详情参考:文件测试逻辑判断使用 &&(且)、||(或)、&#xff…

单例模式之恶汉模式(详解)

一.设计模式 概念:设计模式是一套被反复使用、多人知晓的、经过分类编目的、代码设计经验的总结。 目的:是用设计模式可以重用代码,让代码更容易被他人理解,保证代码的可靠性。 二.为什么要使用单例模式? 如果创造出多…

JSP中的:request.getScheme()+://+request.getServerName()+:+request.getServer

String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()":"request.getServerPort()path"/"; <base href" <%basePath%>"> 这个语句是用来拼装当前网页的相对…

迷宫回溯问题分析和实现

原文链接:传送门 迷宫问题 说明: 小球得到的路径&#xff0c;和程序员设置的找路策略有关即&#xff1a;找路的上下左右的顺序相关再得到小球路径时&#xff0c;可以先使用(下右上左)&#xff0c;再改成(上右下左)&#xff0c;看看路径是不是有变化测试回溯现象思考: 如何求出…

canvas clear 指定属性的元素_好程序员web前端分享CSS属性组成及作用

好程序员web前端分享CSS属性组成及作用学习目标1、css属性和属性值的定义2、css文本属性3、css列表属性4、css背景属性5、css边框属性6、css浮动属性一、css属性和属性值的定义属性&#xff1a;属性是指定选择符所具有的属性&#xff0c;它是css的核心&#xff0c;css2共有150多…

mybatis大于小于等于

大于&#xff1a;<![CDATA[>]]> 小于&#xff1a;<![CDATA[<]]> 等于&#xff1a;<![CDATA[]]> 大于等于&#xff1a;<![CDATA[>]]> 小于等于&#xff1a;<![CDATA[<]]>转载于:https://www.cnblogs.com/YuanFan123/p/7234530.html

2017年秋招-广联达面试及思考

面试官提问&#xff1a; 自我介绍&#xff08;没有做充分的准备&#xff0c;总感觉说的不好&#xff09;为什么选择做前端&#xff1f;在前端方向&#xff0c;你认为自身有哪些优点&#xff1f;前端需要掌握哪些技术知识点&#xff1f;看过哪些比较好的网站&#xff1f;会不会使…

排序算法介绍和分类

原文链接:传送门 排序算法的介绍 排序也成排序算法 排序也称排序算法(Sort Algorithm)&#xff0c;排序是将一组数据&#xff0c;依指定的顺序进行排列的过程。 排序的分类&#xff1a; 1) 内部排序: 指将需要处理的所有数据都加载到**内部存储器(内存)**中进行排序。 2) 外…

认识高清视频编码(MPEG、H.264、WMV-HD、RMVB)

文章出处&#xff1a;www.net1980.com 原创 最近两年&#xff0c;“高清”这个词语非常火热&#xff0c;已经成为家电和IT行业的最新潮流了。高清视频和普通视频有什么区别呢&#xff1f;主要是分辨率上的区别&#xff0c;720P视频的分辨率为1280X720&#xff0c;1080P视频的分…

解读SPP / SPPF / SimSPPF / ASPP / RFB / SPPCSPC

SPP与SPPF 一、SPP的应用的背景 在卷积神经网络中我们经常看到固定输入的设计&#xff0c;但是如果我们输入的不能是固定尺寸的该怎么办呢&#xff1f; 通常来说&#xff0c;我们有以下几种方法&#xff1a; &#xff08;1&#xff09;对输入进行resize操作&#xff0c;让他们…

go mongodb排序查询_《MongoDB》day two

Mongodb的更新方式有&#xff1f;db.集合名.update() 函数:用于更新已存在的文档。语法格式&#xff1a;db.COLLECTION_NAME.update({查询条件},{更新内容},{更新参数(可选)}) 注&#xff1a;这种方式会覆盖原有的文档。使用更新操作符 使用 save()函数更新文档 Mongodb的updat…

【转】 JMeter学习(二十四)linux启动jmeter,执行./jmeter.sh报错解决方法

1.l-bash: ./jmeter.sh: Permission denied解决办法&#xff1a;jmeter.sh的执行权限改改&#xff0c;是权限不够chmod 777 jmeter.sh2.An error occurred:No X11 DISPLAY variable was set, but this program performed an operation which requires it.步骤一&#xff1a;Lin…

哈希表思路图解和代码实现

原文链接传送门 哈希表(散列)-Google上机题 看一个实际需求&#xff0c;google公司的一个上机题: 有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,住址…),当输入该员工的id时,要求查找到该员工的 所有信息. 要求: 不使用数据库,尽量节省内存,速度越…

android开发学习——Mina框架

Apache Mina Server 是一个网络通信应用框架&#xff0c;对socket进行了封装。 http://www.cnblogs.com/moonandstar08/p/5475766.html http://blog.csdn.net/u010739551/article/details/47361365 http://www.cnblogs.com/yanghuiping/p/4108063.html &#xff08;mina 自定…

glibc交叉编译_TSN之linuxptp交叉编译

0 开发环境1 linuxptp是什么2 为什么要交叉编译linuxptp3 修改makefile4 修改源码5 交叉编译0 开发环境笔记本&#xff1a;ubuntu18.04.5&#xff0c;内核版本为5.3 开发板&#xff1a;imx8mp-evk内核版本&#xff1a;Linux5.4.24交叉编译工具链&#xff1a;fsl-imx-xwayland-g…

230. Kth Smallest Element in a BST

题目&#xff1a; Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Note: You may assume k is always valid, 1 ≤ k ≤ BSTs total elements. Follow up:What if the BST is modified (insert/delete operations) often …