递归应用场景和调用机制
原文链接:传送门
递归
迷宫问题(回溯)
概念
简单呐的说: 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时让代码变得简洁.
案例-递归调用机制
打印问题
public static void test(int n){if(n>2){test(n-1);}System.out.println("n="+n);
}
递归调用规则:
当程序执行到一个方法时,就会开辟一个独立的空间(栈)
阶乘问题
//阶乘问题
public static int factorial(int n) {if (n == 1) {return 1;} else {return factorial(n - 1) * n; // 1 * 2 * 3}
}
斐波那契数列
这个也是可以用这个 递归实现的
经典案例
递归用于解决什么样的问题
- 各种数学问题如: 8皇后问题 , 汉诺塔, 阶乘问题, 迷宫问题, 球和篮子的问题(
google
编程大赛) - 各种算法中也会使用到递归,比如快排,归并排序,二分查找,分治算法等.
- 将用栈解决的问题–>第归代码比较简洁
递归需要遵守的重要规则
- 执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
- 方法的局部变量是独立的,不会相互影响, 比如
n
变量 - 如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据.
- 递归必须向退出递归的条件逼近,否则就是无限递归,出现
StackOverflowError
,死龟了:) - 当一个方法执行完毕,或者遇到
return
,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。
案例
球和篮子问题
你有几个同样的球,你希望把它放到几个篮子里。每个篮子有相同的容量。给出int 型的baskets,代表篮子的数量。给出int型的 capacity,代表每个篮子的最大容量。给出int型的balls,表示归类到篮子里的球的数量。返回值是把球归类到篮子里的方式的数量。如果不能完全存放到篮子中,无法划分,返回0。 篮子互不同,所有的球相同。因此,如果2个球放到2个篮子里,你可以采用3种方式,即(0, 2), (1, 1), 或 (2, 0)
原文链接:传送门
递归应用场景和调用机制相关推荐
- 【递归算法01】递归的调用机制
方法的递归调用 目录: 方法的递归调用 1. 基本介绍: 2. 递归能解决什么问题? 3. 递归举例分析: 3.1 打印问题: 3.2 阶乘问题: 递归的重要规则: 1. 基本介绍: 简单地说,递归就 ...
- java同步异步调用_详解java 三种调用机制(同步、回调、异步)
1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,jsPwwCe它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口: 3:异步调用:一种类似消 ...
- 深入浅出Java复用类【从字节码角度看toString调用机制、对象代理、组合与继承、转型、final、初始化】
这个世界上有10种人:一种是懂二进制的,一种是不懂二进制的 你觉得类是在什么时候被加载的?[访问static域时,为什么?看完9就明白了] 文章目录 1.深入理解Java中toString方法的调用机 ...
- java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...
最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...
- Netty 编解码器和 Handler 调用机制
基本说明 1.Netty 的组件设计:Netty 的主要组件有 Channel.EventLoop.ChannelFuture.ChannelHandler.ChannelPipe 等 2.Chann ...
- 方法调用机制内存分析★
方法调用机制内存分析 对于下面的程序 Persion persion = new Persion();int returnRes =persion.sum(4,6);System.out.printl ...
- mediasoup中nack的调用机制
mediasoup中nack的调用机制 1 NACK作用 NACK是用来进行丢包重传的一种方式,简单的理解就是在丢包的时候会根据包序号进行重传,重传的规则可以是遇到丢包时触发,或者定时触发,这里通过m ...
- PHP 阿里云OpenAPI签名[RPC 调用机制]·一键登录取号[云通信号码认证服务]
什么是RPC调用机制,我理解为 可以用 http https 访问的接口. 官方文档:RPC 调用机制 - 阿里云SDK - 阿里云https://help.aliyun.com/document_d ...
- OC语言基础一:OC方法调用机制,new方法实现原理
文章目录 OC方法调用机制 new方法实现原理 野指针 内存溢出 内存泄漏 alloc和init OC方法调用机制 OC有两种方法 Person *person=[Person new]; [pers ...
最新文章
- linux下磁盘分区
- python做的数据图表怎么在flask中显示_Flask使用Pyecharts在单个页面展示多个图表的方法...
- 中国钢铁行业产量规模与十四五建设动态分析报告2022-2027年
- 实例对象静态对象实例方法静态方法
- VTK:可视化之BackgroundColor
- C语言的int, float,double相互转化 (从本质上理解可能的问题)
- 熬夜并不值得程序员炫耀
- 2018.2.2PHPstrom破解版
- 用python进行多页数据爬取_Python Scrapy如何实现多页数据爬取?
- 6分钟看懂 Node.js 武功精髓
- Hyper-V 2016 系列教程49 Windows Server Backup 备份计划的新建备份、修改备份和停止备份...
- checkbox:获取选中的checkbox
- 在Wireshark的tcptrace图中看清TCP拥塞控制算法的细节(CUBIC/BBR算法为例)
- echarts全国省市县下钻
- 桌面快捷方式计算机打不开,桌面快捷方式打不开,详细教您桌面快捷方式打不开怎么解决...
- 【SeedCoder2015年 热身题5 搜索】上上下下ABAB (题目+答案)
- layui个人中心html,Layui的简易入门教程
- 四种基础博弈 巴什博奕+威佐夫博奕+斐波那契博弈+K倍博弈
- 鸿蒙王者荣耀想要转区吗,王者荣耀转区注意事项 你了解了吗
- IPv4 地址与 int 值转换【Python】
热门文章
- OpenCL memory object 之 Global memory (1)
- x264_param_t结构体参数分析
- linux系统/opt目录和/usr/local目录有什么区别
- CentOS7 使用 firewalld 打开关闭防火墙与端口
- MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
- [WARNING] The POM for XXX-system:jar:1.9.0-SNAPSHOT is missing, no dependency information available
- 653. Two Sum IV - Input is a BST
- java 将一段时间分割为两个连续的时间
- 自定义封装 banner 组件
- Android selector中的item的顺序