Java递归调用
6.递归调用
方法的递归调用就是方法自身调用自身。
以下程序因为递归没有结束的条件,所以一直压栈,没有弹栈,导致栈内存溢出错误!所以递归必须要有结束条件。
public class RecursionTest01{ //入口 public static void main(String[] args){ m1(); } public static void m1(){ m1(); //java.lang.StackOverflowError } } |
【例题1】:不使用递归,计算1-N的求和。
public class RecursionTest02{ public static void main(String[] args){ int n = 5; //调用该方法完成1-N的求和 int retValue = method1(n); System.out.println(retValue); //15 } //该方法完成1-N的求和. public static int method1(int n){ int sum = 0; for(int i=0;i<=n;i++){ sum += i; } return sum; } } |
【例题2】:使用递归,计算1-N的求和。
public class RecursionTest03{ public static void main(String[] args){ int n = 5; //调用该方法完成1-N的求和 int retValue = method1(n); System.out.println(retValue); //15 } //该方法完成1-N的求和. //1+2+3+4+5+...N public static int method1(int n){ if(n==1){ return 1; }else{ return n + method1(n-1); }}} |
【练习】:计算N的阶乘。两种方式:使用递归和不使用递归。
public class RecursionTest04{ public static void main(String[] rgs){ System.out.println(method1(5)); //120 } public static int method1(int n){ //不使用递归 int result = 1; for(int i=1;i<=n;i++){ result *= i; } return result; //使用递归 if(n==1){ return 1; }else{ return n * method1(n-1); } } } |
Java递归调用的更多相关文章
- 慎用Java递归调用
总结:慎用Java递归调用,测试时可以尝试该方法,否则尽量不要使用递归!递归过多调用时,最好改为for或者whlie来代替. 在java语言中,使用递归调用时,如果过多的调用容易造成java.lang ...
- Java 递归调用 recursive 给一个参数 返回一大堆
需求: 需要组装成对象多层嵌套式的 json字符串; 想到使用 递归来完成这个多层嵌套: 憋了四个小时,终于写出来了; 先看效果: 数据库中的数据: 拼装后的效果: [ EmpVO{ ename='孙 ...
- java——递归调用
递归函数调用调用本身,并通过自己的相应参数,这个计算过程中进行层,直到满足某些条件,只要停止呼叫. 递归函数的特点 1.函数要直接或间接调用自身. 2.要有递归终止条件检查.即递归终止的条件被满足后. ...
- java递归调用 return的问题
最近比较闲,写了个递归调用获取最大公约数,刚开始写错了,但一直不明白错在哪,错误代码如下: public class Demo { public static void main(String[] a ...
- Java递归调用改成非递归
在java语言中,使用递归调用时,如果过多的调用容易造成java.lang.StackOverflowError即栈溢出和程序执行过慢.这是一个潜在Bug和影响程序执行效率问题,需要谨慎使 ...
- java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题
/* 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 */ impo ...
- JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
- Java中的递归调用
Java中不合理的使用递归调用,可能会导致栈内存溢出,这点是需要注意的. java将为每个线程维护一个栈,栈里将为每个方法保存一个栈帧,栈帧代表了一个方法的运行状态. 也就是我们常说的方法栈.最后一个 ...
- Java中函数的递归调用
说到递归,java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的. public class HelloWorld { public static void ...
随机推荐
- Android各种蓝牙设备的UUID(转)
转自:http://www.14blog.com/archives/481 UUID是“Universally Unique Identifier”的简称,通用唯一识别码的意思.对于蓝牙设备,每个服务 ...
- Dubbox服务的提供方配置
在src/main/resources下创建applicationContext-service.xml ,内容如下: <?xml version="1.0" encodin ...
- appium1.4+华为8.0执行自动化脚本,报启动session失败,原因是unicode_ime_apk\Uni codeIME-debug.apk在手机上已存在,再次安装失败,导致启动session失败,解决办法:换高版本的appium
最开始做Android自动化测试时,通过执行脚本发现报,已安装UnicodeIME-debug.apk,再次安装失败,当时觉得这个apk对我来说没用,就把D:\Program Files (x86)\ ...
- Unity HOME
{ https://unity.com/cn?_ga=2.134655153.1528856053.1574826116-818341090.1574826116 }
- 阿里云智能推荐AIRec产品介绍
一.智能推荐(AIRec)简介 AIRec背景介绍 智能推荐(简称AIRec)基于阿里巴巴集团领先的大数据和人工智能技术,结合阿里巴巴在电商.内容.新闻.视频直播和社交等多个行业领域的积累,为全球企业 ...
- iphone5越狱后问题的解决办法
1,添加各种源失败,显示红字. 解决办法: 如果出现bad 404等红字,一般是由于网络问题,服务器挤爆了,导致不能添加,这种情况大家可以换一个时间段添加源,或者使用网速快一点的网络,比如3g,多试几 ...
- 破解极验(geetest)验证码
破解极验(geetest)验证码 这是两年前的帖子: http://www.v2ex.com/t/138479 一个月前的破解程序,我没用过 asp.net ,不知道是不是真的破解了, demo ...
- hive调用MapReduce之后遇到kill command之后卡住或者一直开在MapReduce之前
https://blog.csdn.net/weixin_42158422/article/details/88876943
- js读取json数据
{ "code": 0, "msg": null, "data": { "pageNum": 1, "page ...
- Django框架(十二)—— 补充:inclusion_tag、defer、only、choice、事务、创建多对多的第三张表
目录 补充:inclusion_tag.defer.only.choice.事务.创建多对多的第三张表 一.inclusion_tag 1.作用 2.使用 二.defer与only 1.定义 2.使用 ...