1、基本说明

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

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

递归本质:程序调用自身的编程技巧叫做递归。

2、递归需要满足三个条件:

  1. 边界条件
  2. 递归前进段
  3. 递归返回段

当边界条件不满足时,递归前进;当边界条件满足时,递归返回。

3、递归能解决什么问题?

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

4、递归举例

4.1打印问题

public class TestRecursion {public static void main(String[] args) {a a = new a();a.test(4);}
}class a {public void test(int n) {if (n >2) {test(n - 1);}System.out.println("n=" + n);}
}

打印问题在JVM内存中的执行过程

4.2阶乘问题

public class TestRecursion {public static void main(String[] args) {int res = a.factorial(5);System.out.println("res=" + res);}
}class a {//阶乘问题public int factorial(int n) {if (n == 1) {return 1;} else {return factorial(n - 1) * n;}}}

阶乘问题分析:

此题中,按照递归的三个条件来分析:
(1)边界条件:阶乘,乘到最后一个数,即1的时候,返回1,程序执行到底;
(2)递归前进段:当前的参数不等于1的时候,继续调用自身;
(3)递归返回段:从最大的数开始乘,如果当前参数是5,那么就是5*4,即5*(5-1),即n*(n-1)

5、递归方法进阶练习(求斐波那契数)

请使用递归的方式求出斐波那契数1,1,2,3,5,8,13....

给你一个整数n,求出他的值是多少

思路分析

  1. 当n = 1 斐波那契数是       1
  2. 当n = 2斐波那契数是        1
  3. 当n >= 3 斐波那契数是前两个数的和
  4. 这里就是一个递归的思路

代码实现

public class TestRecursion {public static void main(String[] args) {T t1 = new T();System.out.println("当n=7 对应的斐波那契数=" + t1.fibonacci(7));}
}class T {public int fibonacci(int n) {if (n >= 1) {if (n == 1 || n == 2) {return 1;} else {return fibonacci(n - 1) + fibonacci(n - 2);}} else {System.out.println("要求输入的n>=1的整数");return -1;}}}

控制台输出结果:当n=7时,对应的斐波那契数= 13;

6、递归重要规则

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

JAVA基础之方法的递归调用相关推荐

  1. 方法的定义使用,方法重载及方法的递归调用

    方法 1.方法的定义与使用 2.方法的重载 3.方法的递归调用 3.1栈溢出 1.方法的定义与使用 定义一个没有参数值,没有返回值的方法 定义一个有参数无返回值的方法 定义 有返回值,有参数的方法 p ...

  2. Java基础学习——方法

    Java基础学习--方法 前言 本文将介绍有关Java面向对象编程的知识之一:方法:其中包括方法的概念,三类方法的格式.方法的重载以及方法的内存 方法的概念 方法是程序中最小的执行单元 方法定义:将一 ...

  3. return 和 方法的递归调用

    return语句直接结束方法 方法的递归调用: 递归调用是一种特殊的调用形式,是方法自己调用自己,如图所示: 例子:完成数字的累加操作,除了循环操作以外还可以使用递归调用: 代码: package W ...

  4. 10、Java 方法的递归调用详解(递归调用的分析和案例:阶乘、斐波那契、猴子吃桃)

    文章目录 一.递归缩写 二.递归调用 (1) 递归方式求累加和 (2) 递归内存分析 三.递归调用(概念) 四.递归调用举例 五.递归注意事项 六.斐波那契数列 七.猴子吃桃 一.递归缩写

  5. Java基础:函数声明与调用

    方法函数 在接触到Java的第一个程序时就存在函数.主函数是Java中规定写法的一种函数:主函数通常写在公开类中,在执行Java程序的时候自动主函数中的代码. 函数的定义: 函数是写在类中具有一定特殊 ...

  6. Java基础02 方法与数据成员

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在Java基础01 从HelloWorld到面向对象,我们初步了解了对象(obje ...

  7. JAVA基础——toString()方法,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  8. Java基础 五 方法

    方法 1.1      方法概述 在我们的日常生活中,方法可以理解为要做某件事情,而采取的解决办法. 如:小明同学在路边准备坐车来学校学习.这就面临着一件事情(坐车到学校这件事情)需要解决,解决办法呢 ...

  9. Java基础语法——方法

    每日正能量 人生如逆旅,我亦是行人,乱花渐欲迷人眼,沉醉不知归路.既然无法留住身边的美好,那就一直往前,看到更多. 方法 方法是完成特定功能的.相对独立的程序段,与其它编程语言中的子程序.函数等概念相 ...

最新文章

  1. 2022-2028年中国出行O2O市场深度调研及投资前景预测报告
  2. java与fabric区块链--fabric-java-jdk部署搭建--(1)
  3. 【Google Play】Google Play 开放式测试 ( 简介 | 发布开放式测试版本 )
  4. Ubnutu虚拟机怎么修改开机密码?(在已知旧密码的情况下,开机后设置新的密码的方法)
  5. 【Beta阶段】第二次Scrum Meeting!
  6. java keeplive,java http长链接(keep-alive)导致的问题
  7. 菲教驰骋在线外教市场,51Talk、阿卡索谁能攫取行业红利?
  8. vc udp 广播接收和发送_UDP编程与DatagramSocket类:UDP的套接字
  9. 某国有7个城市,它们互相之间没有公路相通,因此交通十分不便。为解决这一“行路难”的问题,政府决定修建公路,经过调研,如果把这7个城市之间的关系看成一个图,字母代表城市名称,数字代表修路的花费。【详解】
  10. c语言opencv所用库函数,Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略...
  11. java awt区域_java的awt包中有没有表示区域的类或者方法,可以传递一个Rectangle
  12. ubuntu清空回收站
  13. 细说PHP:人人都能玩转PHP和MySQL Web开发
  14. 删除了电脑硬盘的数据能恢复吗,硬盘数据删除了还能恢复吗
  15. bt 与 ed2k 区别
  16. 微信公众平台的账号、微信商户平台的账号、以及小程序的账号都是不同的
  17. QML 编译release 报错: qmlcache_loader.cpp:-1: error: undefined reference to `__imp__ZN11QQmlPrivate13qml
  18. 二极管 在低温下 压降 很大
  19. Cesium 加载地形数据
  20. mac os 开启redis_在Mac os x 安装 Redis

热门文章

  1. js逆向案例-某数美
  2. 简述彭罗斯近年一些公开讲堂内容的物理意义
  3. linux中rwrwr权限是多少,linux4_权限控制.ppt
  4. SON_EXAM考试php,螃蟹学PHP设计模式之模板模式
  5. 各位,我们应该选数播还是CD机?
  6. JavaScript数组扁平化的实现
  7. linux运行reggen文件,Linux启动问题——记Virtex-II Pro(PPC405)Linux内核移植
  8. html 卡片拖动自动排列,vue卡片拖拽、自动排列交换位置、拖拽数据存取
  9. 基于 K-means 算法的校园微博热点话题发现系统
  10. C6000系列DSP优化总结