关于递归,可能是很多小伙伴的噩梦,不明白为什么简简单单的两三行代码就能将问题给解决了?不过今天,看完了这篇文章,相信小伙伴们会对递归有个更加深入的了解。

什么是递归

这就是递龟(bushi)

递归在百度百科上的定义是指一种通过重复将问题分解为同类的子问题而解决问题的方法。也就是说,将一个大问题拆分为多个相同的小问题,再将小问题拆分为更多个相同的小小问题。

在编程中,递归就是方法自己调用自己。 调用A方法解决B问题,然后再在A方法中调用A方法解决B问题拆分出来的小问题。

比如在读书时候,每次考试坐在后排的同学可能会有这样的经历。考试结束后,监考老师说,将试卷从最后排(第七排)传到第一排,那么第七排的同学就会将试卷传给第六排,第六排传给第五排,这样子一直传下去,直到试卷到达第一排同学手中,这个时候就可以停止传递了……听完这个例子,相信小伙伴应该对递归有一个初步的理解了吧!

话不多说,先上实例:

递归用法实例

在上面求和的例子中,我们可以看出,要求1到5的和,可以调用sum方法求和,然后再在sum方法内部调用sum方法求1到4的和……一次类推,直到sum方法的参数为1时,开始返回(可以看下图分析)

//计算从一到十的加和public static void main(String args[]) {int n = 5;sum(n);
}public static int sum(int n) {if(n == 1) {return 1;}return n + sum(n - 1);
}

递归的条件

存在限制条件。

限制条件换句话说,就是问题的最小规模,当问题被拆分到什么程度时,问题可以开始被解决。如果不存在限制条件,那么问题就能被无限拆分。

每次调用都会越来越接近限制条件。

递归和循环的对比

在学递归的时候,由于递归和循环很相似,所以很多人会将递归和循环进行对比。那我也跟风一下对比一下。

递归:递归的一个明显优点是代码量少,但是同时也比循环更难理解。如果使用不当,还可能出现栈溢出的现象。

循环:容易理解,可以用递归解决的基本都可以用循环解决。但是循环相对递归而言代码量多。

递归题目实训

1.写一个传试卷的代码吧,尝试将试卷从第十排传到第一排

2.递归求n的阶乘

3.递归求n的斐波那契数

写在最后,对于初学者来说,理解递归只是第一步,更重要的是多做题才能加深印象和1了解!

Java入门篇—方法之递归篇相关推荐

  1. Java入门算法(滑动窗口篇)丨蓄力计划

    本专栏已参加蓄力计划,感谢读者支持❤ 往期文章 一. Java入门算法(贪心篇)丨蓄力计划 二. Java入门算法(暴力篇)丨蓄力计划 三. Java入门算法(排序篇)丨蓄力计划 四. Java入门算 ...

  2. 明翰Java入门教学系列之IO篇

    复习 1.线程的同步与通信有几种方式? 2.创建线程有几种方式? 3.什么是方法重写与方法重载? 4.线程与进程的区别? 5.如何最高效的遍历Map? 6.线程的状态与生命周期? 7.HashTabl ...

  3. 八.java入门【方法】

    [方法] 方法的概念[重要] 无参数无返回值方法的定义和调用[重要] 有参数无返回值方法的定义和调用[重要] 有参数有返回值方法的定义和调用[重要重要重要重要重要] 第一章 方法入门[理解] 1.1 ...

  4. Educoder——Java入门:方法的使用

    package step1;public class HelloWorld {/********** Begin **********///定义一个方法,用来和老师打招呼public static v ...

  5. 头歌(educoder)第 4 章 Java入门之方法 Java入门 - 方法的使用

    目录 第1关:如何定义方法 第2关:掌握无参有返回值方法的调用 第3关: 掌握有参数无返回值方法的调用 第4关:掌握有参数有返回值方法的调用 第5关:掌握数组作为参数的使用 第6关:方法的重载 第7关 ...

  6. JAVA基础之方法的递归调用

    1.基本说明 递归调用就是在当前的函数中调用当前的函数并传给相应的参数,这是一个动作,这一动作是层层进行的,直到满足一般情况的的时候,才停止递归调用,开始从最后一个递归调用返回. 简单的说:递归就是方 ...

  7. JAVA入门学习 —方法使用

    目录 实例 遍历数组 实例 1.无参数无返回值类型: public class Demo {public static void main(String[] args) {fun();}public ...

  8. Java入门算法(动态规划篇2:01背包精讲)

    本专栏已参加蓄力计划,感谢读者支持❤ 往期文章 一. Java入门算法(贪心篇)丨蓄力计划 二. Java入门算法(暴力篇)丨蓄力计划 三. Java入门算法(排序篇)丨蓄力计划 四. Java入门算 ...

  9. Java入门算法(贪心篇)丨蓄力计划

    本专栏已参加蓄力计划,感谢读者支持 往期文章 一. Java入门算法(贪心篇)丨蓄力计划 二. Java入门算法(暴力篇)丨蓄力计划 三. Java入门算法(排序篇)丨蓄力计划 四. Java入门算法 ...

最新文章

  1. 【struts2+hibernate+spring项目实战】分页功能的完整的实现(通用分页、基类实现)
  2. Express应用配置以及统一安装所需依赖和快速创建应用骨架
  3. 别在被骗了!!!!!!
  4. 6G尚处于早期研究阶段,长足发展需要时间和耐心
  5. lua和unity如何交互_(XLua)C#与Lua中的交互
  6. 矩池云上使用nohup和让任务后台运行
  7. leach算法的实现过程_LEACH-REC算法的研究及实现
  8. Python返回列表的中位数
  9. 关于微信授权获取昵称含Emoji表情引发的乱码问题总结
  10. 爱快路由游戏私服全开
  11. Springboot毕业设计毕设作品,人脸识别签到考勤系统设计与实现
  12. 14个SpringBoot优化小妙招
  13. RGB与YCbCr颜色空间的转换
  14. 【AdaBoost算法】
  15. 前端React下载文件到浏览器
  16. 线性代数(七)二次型——正交变换法化二次型为标准形
  17. 文献阅读 - Poisson Image Editing
  18. oracle官网下载JDK速度很慢的解决方案
  19. iOS:集成iAd广告
  20. 利用word和excel实现中英文互换

热门文章

  1. item_search_seller - 搜索店铺列表(淘宝)
  2. 11.PS-神奇的仿制图章
  3. 【活动】今晚“吃鸡”还是“农药”,游戏背后的程序员告诉你如何造就一个好游戏?
  4. html做预约人数显示,科目一预约号数字在变,预约人数已满还能约吗
  5. 关于计算机主机内部结构的问题,一种计算机主机内部加强支撑装置的制作方法...
  6. 安装GIT服务器 gitolite,及权限管理
  7. 用python来写Excel 的vlookup
  8. 期货市场持仓量交易法则(期货持仓量公式)
  9. 虚拟化之VMware vSphere全配置
  10. 王者荣耀s19赛季服务器维护,王者荣耀S19赛季更新开启时间 王者荣耀3月31日更新内容公告...