java递归基本结构_JAVA学习入门篇_递归结构
递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。
利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。
递归结构包括两个部分:
1.定义递归头。解答:什么时候不调用自身方法。如果没有头,将陷入死循环,也就是递归的结束条件。
2.递归体。解答:什么时候需要调用自身方法。
【示例3-22】递归:计算n!
public class Test22 {
public static void main(String[] args) {
long d1 = System.currentTimeMillis();
System.out.printf("%d阶乘的结果:%s%n", 10, factorial(10));
long d2 = System.currentTimeMillis();
System.out.printf("递归费时:%s%n", d2-d1); //耗时:32ms
}
/** 求阶乘的方法*/
static long factorial(int n){
if(n==1){//递归头
return 1;
}else{//递归体
return n*factorial(n-1);//n! = n * (n-1)!
}
}
}
图3-27 示例3-22运行效果图
图3-28 递归原理分析图
递归的缺陷
简单的程序是递归的优点之一。但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多,所以在使用递归时要慎重。
比如上面的递归耗时558ms。但是用普通循环的话快得多,如示例3-23所示。
使用循环求n
public class Test23 {
public static void main(String[] args) {
long d3 = System.currentTimeMillis();
int a = 10;
int result = 1;
while (a > 1) {
result *= a * (a - 1);// a*
a -= 2;
}
long d4 = System.currentTimeMillis();
System.out.println(result);
System.out.printf("普通循环费时:%s%n", d4 - d3);
}
}
图3-29 示例3-23运行效果图
注意事项
任何能用递归解决的问题也能使用迭代解决。当递归方法可以更加自然地反映问题,并且易于理解和调试,并且不强调效率问题时,可以采用递归;
在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。
java递归基本结构_JAVA学习入门篇_递归结构相关推荐
- java ligerui_[Java教程]jQuery LigerUI 使用教程入门篇_星空网
jQuery LigerUI 使用教程入门篇 2012-01-17 0 阅读目录获取最新代码 ligerUI是什么 如何使用 如何扩展 获取最新代码 可以到http://ligerui.googlec ...
- java语言提供结构_java学习之语句结构
在java语言当中存在4中语句结构,分别是: 1.顺序结构 2.判断结构 3.选择结构 4.循环结构 一.顺序结构: 所谓的顺序结构,也就是当不指定其他三种语句结构的情况下,语句是从上往下依次执行的, ...
- java bo代表什么_Java学习入门-08 -基本概念--PO、VO、DAO、BO、POJO
几种对象(PO,VO,DAO,BO,POJO)关系示意图 说这几种对象前我们最好先对MVC三层架构有一定了解,M代表数据层.V代表展示层.C代表逻辑层(控制层).但我们也必须了解并不是所有项目都遵循M ...
- Java基础-SSM之mybatis快速入门篇
Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...
- java helloworld代码_java学习应用篇|逃不掉的HelloWorld
本文知识点 1.表白不是发起进攻的冲锋号,而是吹响胜利的号角 2.除了爱情不讲道理,公理也不讲道理 3.这世界,离了javac,也是可以运行的! 4.Hello,寺水 写程序并不是写代码 看前面啰啰嗦 ...
- java object转泛型_JAVA快速入门——基本结构、基本数据类型
Java程序基本结构 一个完整的Java程序基本结构: 下面我们来一点点解剖上面代码的含义: class是关键字,这里定义的class名字就是HelloWorld: 类名必须以英文字母开头,后接字母, ...
- java单引号转义_Java基础入门——Java语言基础(上)
本篇我们开始进入Java的学习,首先在学习如何编写Java语言前要先了解Java程序的基本结构. 一.Java程序的基本结构 一个Java程序的基本结构大体可以分为包.类.main()主方法.标识符. ...
- 动静结合?Ruby 和 Java 的基础语法比较(入门篇)
前言 这篇文章示例代码比较多, Java 程序员可以看到一些 Ruby 相关语法和使用,Ruby 程序员可以看看 Java 的基本语法和使用方法,本文比较长,将近万字左右,预计需要十几分钟,如果有耐心 ...
- 明解C语言入门篇_第12章_结构体
前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...
最新文章
- 解决Flash影片中的图片抖动锯齿
- OSCache-JSP页面缓存(2)
- leetcode 95. Unique Binary Search Trees II | 96. Unique Binary Search Trees
- Java开发人员应该知道的7种新工具
- (转)C#开发微信门户及应用(1)--开始使用微信接口
- XJTUOJ wmq的队伍(树状数组求 K 元逆序对)
- 多元线性回归数据集_TensorFlow学习Program1——13.实现一元、多元线性回归(基于房价数据集)...
- 可解释ai_人工智能解释
- Spring事件监听机制
- 京东联盟高级API - 高并发京东联盟转链接口 京东客转链接口 京粉转链接口 京东联盟返利接口 京东返利接口,线报无广告接口
- html引用资源相对路径,超链接中的绝对路径和相对路径
- 分布式文件存储FASTDFS
- 【金猿技术展】视频矫正技术——基于参数估计的自由几何变换算法
- vue中forEach跳出循环的问题,以及for循环
- 面对中小型机房动力环境该如何实现监控?
- git 连接远程仓库并推送代码
- 摄氏度符号英文计算机语言,英语符号
- Elasticsearch学习-Doc与Segment原理
- QFileInfo(文件信息)和临时文件
- C语言 随机出十道加减法的练习题并自动批改
热门文章
- 4块硬盘做raid几_Linux高级文件系统管理之RAID
- Android 11 修改libcore update-api 遇到的问题
- “逃离”互联网:蚂蚁金服原副总裁离职,重返学术界
- python发送文件给微信好友_Python定时自动给微信好友发送天气预报
- JZOJ5906 传送门
- Noip 2013 练习
- 理解php反序列化漏洞
- 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
- 【转载】Callable、FutureTask中阻塞超时返回的坑点
- 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15)