递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。

​ 利用递归可以用简单的程序来解决一些复杂的问题。比如:斐波那契数列的计算、汉诺塔、快排等问题。

​ 递归结构包括两个部分:

​ 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学习入门篇_递归结构相关推荐

  1. java ligerui_[Java教程]jQuery LigerUI 使用教程入门篇_星空网

    jQuery LigerUI 使用教程入门篇 2012-01-17 0 阅读目录获取最新代码 ligerUI是什么 如何使用 如何扩展 获取最新代码 可以到http://ligerui.googlec ...

  2. java语言提供结构_java学习之语句结构

    在java语言当中存在4中语句结构,分别是: 1.顺序结构 2.判断结构 3.选择结构 4.循环结构 一.顺序结构: 所谓的顺序结构,也就是当不指定其他三种语句结构的情况下,语句是从上往下依次执行的, ...

  3. java bo代表什么_Java学习入门-08 -基本概念--PO、VO、DAO、BO、POJO

    几种对象(PO,VO,DAO,BO,POJO)关系示意图 说这几种对象前我们最好先对MVC三层架构有一定了解,M代表数据层.V代表展示层.C代表逻辑层(控制层).但我们也必须了解并不是所有项目都遵循M ...

  4. Java基础-SSM之mybatis快速入门篇

    Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...

  5. java helloworld代码_java学习应用篇|逃不掉的HelloWorld

    本文知识点 1.表白不是发起进攻的冲锋号,而是吹响胜利的号角 2.除了爱情不讲道理,公理也不讲道理 3.这世界,离了javac,也是可以运行的! 4.Hello,寺水 写程序并不是写代码 看前面啰啰嗦 ...

  6. java object转泛型_JAVA快速入门——基本结构、基本数据类型

    Java程序基本结构 一个完整的Java程序基本结构: 下面我们来一点点解剖上面代码的含义: class是关键字,这里定义的class名字就是HelloWorld: 类名必须以英文字母开头,后接字母, ...

  7. java单引号转义_Java基础入门——Java语言基础(上)

    本篇我们开始进入Java的学习,首先在学习如何编写Java语言前要先了解Java程序的基本结构. 一.Java程序的基本结构 一个Java程序的基本结构大体可以分为包.类.main()主方法.标识符. ...

  8. 动静结合?Ruby 和 Java 的基础语法比较(入门篇)

    前言 这篇文章示例代码比较多, Java 程序员可以看到一些 Ruby 相关语法和使用,Ruby 程序员可以看看 Java 的基本语法和使用方法,本文比较长,将近万字左右,预计需要十几分钟,如果有耐心 ...

  9. 明解C语言入门篇_第12章_结构体

    前言 本文为业余学习<明解C语言入门篇>的记录,包含代码清单和练习题. 开始学习时间:2022年8月21日 +++++++++++++++++++++++++++++++ 第1章 初识C语 ...

最新文章

  1. 解决Flash影片中的图片抖动锯齿
  2. OSCache-JSP页面缓存(2)
  3. leetcode 95. Unique Binary Search Trees II | 96. Unique Binary Search Trees
  4. Java开发人员应该知道的7种新工具
  5. (转)C#开发微信门户及应用(1)--开始使用微信接口
  6. XJTUOJ wmq的队伍(树状数组求 K 元逆序对)
  7. 多元线性回归数据集_TensorFlow学习Program1——13.实现一元、多元线性回归(基于房价数据集)...
  8. 可解释ai_人工智能解释
  9. Spring事件监听机制
  10. 京东联盟高级API - 高并发京东联盟转链接口 京东客转链接口 京粉转链接口 京东联盟返利接口 京东返利接口,线报无广告接口
  11. html引用资源相对路径,超链接中的绝对路径和相对路径
  12. 分布式文件存储FASTDFS
  13. 【金猿技术展】视频矫正技术——基于参数估计的自由几何变换算法
  14. vue中forEach跳出循环的问题,以及for循环
  15. 面对中小型机房动力环境该如何实现监控?
  16. git 连接远程仓库并推送代码
  17. 摄氏度符号英文计算机语言,英语符号
  18. Elasticsearch学习-Doc与Segment原理
  19. QFileInfo(文件信息)和临时文件
  20. C语言 随机出十道加减法的练习题并自动批改

热门文章

  1. 4块硬盘做raid几_Linux高级文件系统管理之RAID
  2. Android 11 修改libcore update-api 遇到的问题
  3. “逃离”互联网:蚂蚁金服原副总裁离职,重返学术界
  4. python发送文件给微信好友_Python定时自动给微信好友发送天气预报
  5. JZOJ5906 传送门
  6. Noip 2013 练习
  7. 理解php反序列化漏洞
  8. 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
  9. 【转载】Callable、FutureTask中阻塞超时返回的坑点
  10. 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15)