java算法的递归问题设计_java算法-递归算法思想
递归算法是跟常见的算法思想。使用递归算法,往往可以简化代码编写,提高程序的可读性。但是,不适合的递归往往导致程序的执行效率变低。
一、递归算法基本思想
递归算法即在程序中不断反复调用自身来叨叨求解问题的方法。此处的重点是调用自身,这就要求待求解的问题能够分解为相同问题的一个子问题。这样,通过多次递归调用,便可以完成求解。
在递归方法中,主调方法又是被调方法。执行递归方法将反复调用其自身。每调用一次就进入新的一层。方法的递归调用分为两种情况分别为:
直接递归:即在方法中调用方法本身.
间接递归:即间接的调用一个方法,如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算法-递归算法思想相关推荐
- java中的递归函数调用函数_Java中函数的递归调用
说到递归,java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的. public class HelloWorld { public static void ...
- java 计算i 出现的次数_JAVA算法:按照给定的段落统计单词出现次数(JAVA代码)...
https://blog.csdn.net/seagal890/article/details/92067644 JAVA算法:按照给定的段落统计单词出现次数(JAVA代码) 写一个 JAVA程序以统 ...
- 2020-11-21(线性扫描反汇编算法和递归下降扫描反汇编算法)
push ebp jmp addr1 db 0xE8 addr1: mov abp,esp sub esp,0x100 根据线性扫描反汇编算法,当反汇编器解析完jmp addr1指令后,会接着从下一个 ...
- fp-tree算法matlab实现,现代设计优化算法MATLAB实现
开篇语 前阵子做现代设计方法的时候,发现网上很是缺乏这种作业形式的简易算法实现,所以特地来简书写一篇.有两份,一份是我的(说来惭愧,我的大部分都是在网上找的代码,然后在自己的电脑上跑一次,跑出来了就行 ...
- java的结课课程设计_Java课程设计总结报告
闽南师范大学计算机学院 Java 课程设计总结报告 .项目开发总结报告 <Java 应用开发与实践>,人民邮电出版社,刘乃琦,苏畅主编 此书中第20章或21章或22章课程设计报告的写法.) ...
- java设置图书管理系统界面设计_java 图书管理系统 界面漂亮 绝对好用
[实例简介] 图书管理系统,界面美观漂亮,绝对可以运行 [实例截图] [核心代码] 图书管理系统 └── 图书管理系统 ├── Database │ ├── db_librarySys │ │ ...
- java迭代和 递归的异同_Java中的递归和迭代之间有什么区别?
该递归和迭代都重复执行的指令集.递归是指函数中的语句重复调用自身时的情况.该迭代是当循环重复执行,直到控制条件为假.递归和迭代之间的主要区别在于,递归是一个过程,始终应用于函数,而迭代则应用于我们要重 ...
- java电子小词典课程设计_Java英汉电子字典课程设计源代码.doc
用户需求分析: 英汉同典作为一个常用的学习工具,是我们经常要使用的.该系统能完成一个简 单的电子词的功能.该系统主要用于实现英汉互译的功能,系统拥有自己的数据 库. 英译汉功能:我们对以先选择让系统进 ...
- java转动的风扇课程设计_java风扇功能设计
风扇开关,转速,半径,颜色 public class TestFan //测试类 { public static void main(String[] args) { Fan f1=new Fan() ...
最新文章
- IE6中PNG图片背景无法透明显示的最佳解决方案
- cannot find -lf2c
- python如何设计系统界面教程_python中pycharm软件界面介绍与配置
- golang中的http server和http client
- 看ct片子的软件_X光、CT、核磁、B超的辐射到底对孩子有多大影响?
- 基于Java的学生信息管理系统
- Unity 3d 中Debug.Log和Print的区别。
- php deployer 从入门到精通
- 微信公众平台万能代码详解-php语言(二)
- 【FLASH存储器系列十二】Nand Flash芯片使用指导之二
- 镭速传输荣获“2021年度优秀软件产品”称号
- 教你用JavaScript制作图片回廊
- c#和python更适合爬虫_Python2和Python3哪个更适合初学者学习来爬虫
- Windows中如何使用vmware虚拟化
- 微信小程序引入阿里巴巴彩色图标字体(Symbol)
- 3星|《不会讲故事,怎么带团队》:讲好故事的套路
- 06【群面】(无领导小组)群面基本介绍考察内容流程,群面常见问题解题思路,群面角色分析考官追问
- 利用SNMP获取H3C交换机端口信息
- 转换文件大小size,将B转换为kb、mb、gb,计算结果保留2位小数
- LVS负载均衡群集架构(二):DR模式群集部署+keepalived
热门文章
- MySQL索引的索引长度问题
- Scala模式匹配和类型系统
- 有关启动图片Launch的设置
- Throwable 结构图
- tomcat修改端口号与eclipse中的tomcat保持一致
- freemark循环map_freemarker中循环map根据key值得value 报错
- vs2013配置opencv2.4.9后出现找不到opencv_core249d.dll和opencv_highgui249d.dll问题
- OpenCV学习笔记(十八):凸包,最小包围区域算子:convexHull(),minAreaRect(),minEnclosingTriangle(),minEnclosingCircle()
- 动态规划——数塔问题
- 数字图像处理 第二章 图像处理基础