递归算法是跟常见的算法思想。使用递归算法,往往可以简化代码编写,提高程序的可读性。但是,不适合的递归往往导致程序的执行效率变低。

一、递归算法基本思想

递归算法即在程序中不断反复调用自身来叨叨求解问题的方法。此处的重点是调用自身,这就要求待求解的问题能够分解为相同问题的一个子问题。这样,通过多次递归调用,便可以完成求解。

在递归方法中,主调方法又是被调方法。执行递归方法将反复调用其自身。每调用一次就进入新的一层。方法的递归调用分为两种情况分别为:

直接递归:即在方法中调用方法本身.

间接递归:即间接的调用一个方法,如func_a调用func_b,func_b又调用func_a间接递归用得不多.

编写递归方法时,必须使用if语句强制方法在未执行递归调用前返回。如果不这样做,在调用方法后,他将永远不会返回。这是一个很容易犯的错误。

二、递归优缺点

1、优点

在方法中使用递归的好处有:程序代码更简洁清晰,可读性更好。有的算法用递归表示要比用循环表示简洁精炼,而且某些问题,特别是与人工智能有关的问题,更适宜用递归方法,如八皇后问题、汉诺塔问题等。有的算法,用递归能实现,而且循环不一定能实现。

2、缺点

大部分递归例程没有明显的减少代码规模和节省内存空间。递归形式比非递归形式运行速度要慢一些。这是因为附加的方法调用增加了时间开销,例如需要执行一系列的压栈出栈等操作。但在许多情况下,速度的差别不太明显。如果递归层次太深,还可能导致堆栈溢出。

三、递归算法实例

递归算法常用于一些数据计算,或者有明显的递推性质问题。理解递归最常用的一个例子是编写程序求阶乘问题。

阶乘就是一个正整数的阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。

五的阶乘就是:5*4*3*2*1

十的阶乘就是:10*9*8*7*6*5*4*3*2*1

public class algorithm {

/**

* 递归算法阶乘

*/

public static int fact(int i){

if (i<=1){

return 1;

}else {

return i*fact(i-1);

}

}

public static void main(String[] args) {

/**

* 递归算法阶乘

*/

System.out.println(fact(12));

}

}

效果如下:

479001600

java算法的递归问题设计_java算法-递归算法思想相关推荐

  1. java中的递归函数调用函数_Java中函数的递归调用

    说到递归,java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的. public class HelloWorld { public static void ...

  2. java 计算i 出现的次数_JAVA算法:按照给定的段落统计单词出现次数(JAVA代码)...

    https://blog.csdn.net/seagal890/article/details/92067644 JAVA算法:按照给定的段落统计单词出现次数(JAVA代码) 写一个 JAVA程序以统 ...

  3. 2020-11-21(线性扫描反汇编算法和递归下降扫描反汇编算法)

    push ebp jmp addr1 db 0xE8 addr1: mov abp,esp sub esp,0x100 根据线性扫描反汇编算法,当反汇编器解析完jmp addr1指令后,会接着从下一个 ...

  4. fp-tree算法matlab实现,现代设计优化算法MATLAB实现

    开篇语 前阵子做现代设计方法的时候,发现网上很是缺乏这种作业形式的简易算法实现,所以特地来简书写一篇.有两份,一份是我的(说来惭愧,我的大部分都是在网上找的代码,然后在自己的电脑上跑一次,跑出来了就行 ...

  5. java的结课课程设计_Java课程设计总结报告

    闽南师范大学计算机学院 Java 课程设计总结报告 .项目开发总结报告 <Java 应用开发与实践>,人民邮电出版社,刘乃琦,苏畅主编 此书中第20章或21章或22章课程设计报告的写法.) ...

  6. java设置图书管理系统界面设计_java 图书管理系统 界面漂亮 绝对好用

    [实例简介] 图书管理系统,界面美观漂亮,绝对可以运行 [实例截图] [核心代码] 图书管理系统 └── 图书管理系统 ├── Database │   ├── db_librarySys │   │ ...

  7. java迭代和 递归的异同_Java中的递归和迭代之间有什么区别?

    该递归和迭代都重复执行的指令集.递归是指函数中的语句重复调用自身时的情况.该迭代是当循环重复执行,直到控制条件为假.递归和迭代之间的主要区别在于,递归是一个过程,始终应用于函数,而迭代则应用于我们要重 ...

  8. java电子小词典课程设计_Java英汉电子字典课程设计源代码.doc

    用户需求分析: 英汉同典作为一个常用的学习工具,是我们经常要使用的.该系统能完成一个简 单的电子词的功能.该系统主要用于实现英汉互译的功能,系统拥有自己的数据 库. 英译汉功能:我们对以先选择让系统进 ...

  9. java转动的风扇课程设计_java风扇功能设计

    风扇开关,转速,半径,颜色 public class TestFan //测试类 { public static void main(String[] args) { Fan f1=new Fan() ...

最新文章

  1. IE6中PNG图片背景无法透明显示的最佳解决方案
  2. cannot find -lf2c
  3. python如何设计系统界面教程_python中pycharm软件界面介绍与配置
  4. golang中的http server和http client
  5. 看ct片子的软件_X光、CT、核磁、B超的辐射到底对孩子有多大影响?
  6. 基于Java的学生信息管理系统
  7. Unity 3d 中Debug.Log和Print的区别。
  8. php deployer 从入门到精通
  9. 微信公众平台万能代码详解-php语言(二)
  10. 【FLASH存储器系列十二】Nand Flash芯片使用指导之二
  11. 镭速传输荣获“2021年度优秀软件产品”称号
  12. 教你用JavaScript制作图片回廊
  13. c#和python更适合爬虫_Python2和Python3哪个更适合初学者学习来爬虫
  14. Windows中如何使用vmware虚拟化
  15. 微信小程序引入阿里巴巴彩色图标字体(Symbol)
  16. 3星|《不会讲故事,怎么带团队》:讲好故事的套路
  17. 06【群面】(无领导小组)群面基本介绍考察内容流程,群面常见问题解题思路,群面角色分析考官追问
  18. 利用SNMP获取H3C交换机端口信息
  19. 转换文件大小size,将B转换为kb、mb、gb,计算结果保留2位小数
  20. LVS负载均衡群集架构(二):DR模式群集部署+keepalived

热门文章

  1. MySQL索引的索引长度问题
  2. Scala模式匹配和类型系统
  3. 有关启动图片Launch的设置
  4. Throwable 结构图
  5. tomcat修改端口号与eclipse中的tomcat保持一致
  6. freemark循环map_freemarker中循环map根据key值得value 报错
  7. vs2013配置opencv2.4.9后出现找不到opencv_core249d.dll和opencv_highgui249d.dll问题
  8. OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle()
  9. 动态规划——数塔问题
  10. 数字图像处理 第二章 图像处理基础