JAVA基础之方法的递归调用
1、基本说明
递归调用就是在当前的函数中调用当前的函数并传给相应的参数,这是一个动作,这一动作是层层进行的,直到满足一般情况的的时候,才停止递归调用,开始从最后一个递归调用返回。
简单的说:递归就是方法自己调用自己,每次调用是传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得整洁。
递归本质:程序调用自身的编程技巧叫做递归。
2、递归需要满足三个条件:
- 边界条件
- 递归前进段
- 递归返回段
当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
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,求出他的值是多少
思路分析
- 当n = 1 斐波那契数是 1
- 当n = 2斐波那契数是 1
- 当n >= 3 斐波那契数是前两个数的和
- 这里就是一个递归的思路
代码实现
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、递归重要规则
- 执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
- 方法的局部变量是独立的,不会相互影响,比如n变量
- 如果方法中使用的是引用类型变量(比如数组,对象),就会共享该引用类型的数据。
- 递归必须向退出递归的条件逼近,否则就是无限递归(龟死了)
- 当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或者放回时,该方法也就执行完毕。
JAVA基础之方法的递归调用相关推荐
- 方法的定义使用,方法重载及方法的递归调用
方法 1.方法的定义与使用 2.方法的重载 3.方法的递归调用 3.1栈溢出 1.方法的定义与使用 定义一个没有参数值,没有返回值的方法 定义一个有参数无返回值的方法 定义 有返回值,有参数的方法 p ...
- Java基础学习——方法
Java基础学习--方法 前言 本文将介绍有关Java面向对象编程的知识之一:方法:其中包括方法的概念,三类方法的格式.方法的重载以及方法的内存 方法的概念 方法是程序中最小的执行单元 方法定义:将一 ...
- return 和 方法的递归调用
return语句直接结束方法 方法的递归调用: 递归调用是一种特殊的调用形式,是方法自己调用自己,如图所示: 例子:完成数字的累加操作,除了循环操作以外还可以使用递归调用: 代码: package W ...
- 10、Java 方法的递归调用详解(递归调用的分析和案例:阶乘、斐波那契、猴子吃桃)
文章目录 一.递归缩写 二.递归调用 (1) 递归方式求累加和 (2) 递归内存分析 三.递归调用(概念) 四.递归调用举例 五.递归注意事项 六.斐波那契数列 七.猴子吃桃 一.递归缩写
- Java基础:函数声明与调用
方法函数 在接触到Java的第一个程序时就存在函数.主函数是Java中规定写法的一种函数:主函数通常写在公开类中,在执行Java程序的时候自动主函数中的代码. 函数的定义: 函数是写在类中具有一定特殊 ...
- Java基础02 方法与数据成员
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在Java基础01 从HelloWorld到面向对象,我们初步了解了对象(obje ...
- JAVA基础——toString()方法,java基础面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- Java基础 五 方法
方法 1.1 方法概述 在我们的日常生活中,方法可以理解为要做某件事情,而采取的解决办法. 如:小明同学在路边准备坐车来学校学习.这就面临着一件事情(坐车到学校这件事情)需要解决,解决办法呢 ...
- Java基础语法——方法
每日正能量 人生如逆旅,我亦是行人,乱花渐欲迷人眼,沉醉不知归路.既然无法留住身边的美好,那就一直往前,看到更多. 方法 方法是完成特定功能的.相对独立的程序段,与其它编程语言中的子程序.函数等概念相 ...
最新文章
- 2022-2028年中国出行O2O市场深度调研及投资前景预测报告
- java与fabric区块链--fabric-java-jdk部署搭建--(1)
- 【Google Play】Google Play 开放式测试 ( 简介 | 发布开放式测试版本 )
- Ubnutu虚拟机怎么修改开机密码?(在已知旧密码的情况下,开机后设置新的密码的方法)
- 【Beta阶段】第二次Scrum Meeting!
- java keeplive,java http长链接(keep-alive)导致的问题
- 菲教驰骋在线外教市场,51Talk、阿卡索谁能攫取行业红利?
- vc udp 广播接收和发送_UDP编程与DatagramSocket类:UDP的套接字
- 某国有7个城市,它们互相之间没有公路相通,因此交通十分不便。为解决这一“行路难”的问题,政府决定修建公路,经过调研,如果把这7个城市之间的关系看成一个图,字母代表城市名称,数字代表修路的花费。【详解】
- c语言opencv所用库函数,Py之cv2:cv2库(OpenCV,opencv-python)的简介、安装、使用方法(常见函数、方法等)最强详细攻略...
- java awt区域_java的awt包中有没有表示区域的类或者方法,可以传递一个Rectangle
- ubuntu清空回收站
- 细说PHP:人人都能玩转PHP和MySQL Web开发
- 删除了电脑硬盘的数据能恢复吗,硬盘数据删除了还能恢复吗
- bt 与 ed2k 区别
- 微信公众平台的账号、微信商户平台的账号、以及小程序的账号都是不同的
- QML 编译release 报错: qmlcache_loader.cpp:-1: error: undefined reference to `__imp__ZN11QQmlPrivate13qml
- 二极管 在低温下 压降 很大
- Cesium 加载地形数据
- mac os 开启redis_在Mac os x 安装 Redis
热门文章
- js逆向案例-某数美
- 简述彭罗斯近年一些公开讲堂内容的物理意义
- linux中rwrwr权限是多少,linux4_权限控制.ppt
- SON_EXAM考试php,螃蟹学PHP设计模式之模板模式
- 各位,我们应该选数播还是CD机?
- JavaScript数组扁平化的实现
- linux运行reggen文件,Linux启动问题——记Virtex-II Pro(PPC405)Linux内核移植
- html 卡片拖动自动排列,vue卡片拖拽、自动排列交换位置、拖拽数据存取
- 基于 K-means 算法的校园微博热点话题发现系统
- C6000系列DSP优化总结