常用的算法-递归
2023-04-18 16:09:55 时间
最近开始复习数据结构和算法的相关知识,以前学习数据结构的时候使用C语言实现其中的数据存储结构。已经学习Java有一年多了,总是忙于写代码,学习新知识,思考总是一瞬间的事,然而这样的境遇总是让我在学习Java软件开发的过程中遇到很多问题,为此牺牲了很多时间。
突然决定启用51Blog来记录每一次尝试,探索,错误的历经。
递归算法的核心在于:
方法能够通过自身的调用得到执行,并且总会得到调用结束的出口。
递归(recursion):神奇的算法
递归编程的注意事项: 递归代码会精彩而且会很短,但却能够完成很复杂的工作; 大部分代码是用来对负责底层工作的递归方法进行支持。
递归和迭代的区别:
迭代:一种用循环来描述需要的重复进行的操作的编程方法。 递归:一种通过调用某个方法来描述需要重复进行的操作的编程方法,该方法的一个基本特 征是:它可以调用自身
iteration algorithm:
public static void writeStar(int n)
{
for(int i=1;i<n;i++)
{
System.out.print(” * “);
}
System.out.println();
}
recursion algorithm:
public static void writeStar(int n)
{
if(n==0)
{
//base case
System.out.println();
}
else
{
//recursion case
System.out.print(” * “);
writeStar(n-1);
}
}
递归结构: 基本情况(base case) 递归情况(recursion case) 基本情况: 一种简单到不需要递归调用就可以直接解决的情况 递归情况: 一种需要把整个问题转化成为一个相同种类,比较简单的,而且可以通过递归调用 来解决问题的情况 函数调用用的是:栈内存 主函数的运行用的是:堆内存
整数的幂运算:
public static int pow(int x,int y)
{
if(y==0)
{
//base case
return 1;
}
else
{
//recursion case
return x*pow(x,y-1);
}
}
递归解决方法过程:
pow(3,5) = 3*pow(3,4)
| pow(3,4) = 3*pow(3,3)
| | pow(3,3) = 3*pow(3,2)
| | | pow(3,2) = 3*pow(3,1)
| | | | pow(3,1) = 3*pow(3,0)
| | | | | pow(3,0) = 1
| | | | pow(3,1) = 3*1 = 3
| | | pow(3,2) = 3*3 = 9
| | pow(3,3) = 3*9 = 27
| pow(3,4) = 3*27 = 81
pow(3,5) = 3*81 = 243
当然递归对于问题的理解和提炼要求是比较高的。
我们使用递归解决的问题:
1.在数据结构中的非线性存储结构中的树,二叉树的前序遍历,中序遍历,后序遍历等问题的解决中就使用了递归算法,这样使解决问题的编码很方便。
2.遍历指定目录下的所有文件
3.二分法排序等等
相关文章
- 【技术种草】cdn+轻量服务器+hugo=让博客“云原生”一下
- CLB运维&运营最佳实践 ---访问日志大洞察
- vnc方式登陆服务器
- 轻松学排序算法:眼睛直观感受几种常用排序算法
- 十二个经典的大数据项目
- 为什么使用 CDN 内容分发网络?
- 大数据——大数据默认端口号列表
- Weld 1.1.5.Final,JSR-299 的框架
- JavaFX 2012:彻底开源
- 提升as3程序性能的十大要点
- 通过凸面几何学进行独立于边际的在线多类学习
- 利用行动影响的规律性和部分已知的模型进行离线强化学习
- ModelLight:基于模型的交通信号控制的元强化学习
- 浅谈Visual Source Safe项目分支
- 基于先验知识的递归卡尔曼滤波的代理人联合状态和输入估计
- 结合网络结构和非线性恢复来提高声誉评估的性能
- 最佳实践丨云开发CloudBase多环境管理实践
- TimeVAE:用于生成多变量时间序列的变异自动编码器
- 具有线性阈值激活的神经网络:结构和算法
- 内网渗透之横向移动 -- 从域外向域内进行密码喷洒攻击