原文链接:传送门

递归

迷宫问题(回溯)

概念

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

案例-递归调用机制

打印问题

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

递归调用规则:

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

阶乘问题

//阶乘问题
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)

原文链接:传送门

递归应用场景和调用机制相关推荐

  1. 【递归算法01】递归的调用机制

    方法的递归调用 目录: 方法的递归调用 1. 基本介绍: 2. 递归能解决什么问题? 3. 递归举例分析: 3.1 打印问题: 3.2 阶乘问题: 递归的重要规则: 1. 基本介绍: 简单地说,递归就 ...

  2. java同步异步调用_详解java 三种调用机制(同步、回调、异步)

    1:同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,jsPwwCe它是一种单向调用 2:回调:一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口: 3:异步调用:一种类似消 ...

  3. 深入浅出Java复用类【从字节码角度看toString调用机制、对象代理、组合与继承、转型、final、初始化】

    这个世界上有10种人:一种是懂二进制的,一种是不懂二进制的 你觉得类是在什么时候被加载的?[访问static域时,为什么?看完9就明白了] 文章目录 1.深入理解Java中toString方法的调用机 ...

  4. java方法调用机制_Java方法调用机制 - osc_bkdv2it5的个人空间 - OSCHINA - 中文开源技术交流社区...

    最近在编程时,修改方法传入对象的对象引用,并没有将修改反映到调用方法中.奇怪为什么结果没有变化,原因是遗忘了Java对象引用和内存分配机制.本文介绍3个点: ① 该问题举例说明 ② 简要阐述Java内 ...

  5. Netty 编解码器和 Handler 调用机制

    基本说明 1.Netty 的组件设计:Netty 的主要组件有 Channel.EventLoop.ChannelFuture.ChannelHandler.ChannelPipe 等 2.Chann ...

  6. 方法调用机制内存分析★

    方法调用机制内存分析 对于下面的程序 Persion persion = new Persion();int returnRes =persion.sum(4,6);System.out.printl ...

  7. mediasoup中nack的调用机制

    mediasoup中nack的调用机制 1 NACK作用 NACK是用来进行丢包重传的一种方式,简单的理解就是在丢包的时候会根据包序号进行重传,重传的规则可以是遇到丢包时触发,或者定时触发,这里通过m ...

  8. PHP 阿里云OpenAPI签名[RPC 调用机制]·一键登录取号[云通信号码认证服务]

    什么是RPC调用机制,我理解为 可以用 http https 访问的接口. 官方文档:RPC 调用机制 - 阿里云SDK - 阿里云https://help.aliyun.com/document_d ...

  9. OC语言基础一:OC方法调用机制,new方法实现原理

    文章目录 OC方法调用机制 new方法实现原理 野指针 内存溢出 内存泄漏 alloc和init OC方法调用机制 OC有两种方法 Person *person=[Person new]; [pers ...

最新文章

  1. linux下磁盘分区
  2. python做的数据图表怎么在flask中显示_Flask使用Pyecharts在单个页面展示多个图表的方法...
  3. 中国钢铁行业产量规模与十四五建设动态分析报告2022-2027年
  4. 实例对象静态对象实例方法静态方法
  5. VTK:可视化之BackgroundColor
  6. C语言的int, float,double相互转化 (从本质上理解可能的问题)
  7. 熬夜并不值得程序员炫耀
  8. 2018.2.2PHPstrom破解版
  9. 用python进行多页数据爬取_Python Scrapy如何实现多页数据爬取?
  10. 6分钟看懂 Node.js 武功精髓
  11. Hyper-V 2016 系列教程49 Windows Server Backup 备份计划的新建备份、修改备份和停止备份...
  12. checkbox:获取选中的checkbox
  13. 在Wireshark的tcptrace图中看清TCP拥塞控制算法的细节(CUBIC/BBR算法为例)
  14. echarts全国省市县下钻
  15. 桌面快捷方式计算机打不开,桌面快捷方式打不开,详细教您桌面快捷方式打不开怎么解决...
  16. 【SeedCoder2015年 热身题5 搜索】上上下下ABAB (题目+答案)
  17. layui个人中心html,Layui的简易入门教程
  18. 四种基础博弈 巴什博奕+威佐夫博奕+斐波那契博弈+K倍博弈
  19. 鸿蒙王者荣耀想要转区吗,王者荣耀转区注意事项 你了解了吗
  20. IPv4 地址与 int 值转换【Python】

热门文章

  1. OpenCL memory object 之 Global memory (1)
  2. x264_param_t结构体参数分析
  3. linux系统/opt目录和/usr/local目录有什么区别
  4. CentOS7 使用 firewalld 打开关闭防火墙与端口
  5. MySQL 实现树形的遍历(关于多级菜单栏以及多级上下部门的查询问题)
  6. [WARNING] The POM for XXX-system:jar:1.9.0-SNAPSHOT is missing, no dependency information available
  7. 653. Two Sum IV - Input is a BST
  8. java 将一段时间分割为两个连续的时间
  9. 自定义封装 banner 组件
  10. Android selector中的item的顺序