java递归和循环有什么关系?java里递归和迭代分别是什么算法啊
各位老铁们好,相信很多人对java递归和循环有什么关系都不是特别的了解,因此呢,今天就来为大家分享下关于java递归和循环有什么关系以及java里递归和迭代分别是什么算法啊的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
java基础都有那些
一、标识符
java对各种变量、方法和类等要素命名时使用的字符序列成为标识符;通俗点,凡是自己可以起名字的地方都叫标识符,都遵守标识符的规则
1.标识符命名规则:
1)标识符由字符、下划线、美元符或数字组成。
2)标识符应以字符、下划线、美元符开头
3)java标识符大小写敏感,长度无限制
4)约定俗成,java标识符选取应该注意“见名知意”且不能与java语言的关键字(eclipes中带颜色的基本都是关键字)重名
二、关键字
java中一些赋以特定含义,用作专门用途的关键的字符串成为关键字(keyword);且大多数编辑器都会将关键字用特殊方式标出所有java关键字都是小写英文
一些常用关键字:
三、java的基本数据类型
1.java常量
java的常量值用字符串表示,区分为不同的数据类型。如:整型常量:1234实型常量:3.14字符常量:’a’逻辑常量:true、false字符串常量:”HelloWorld”
注意:
1)区分字符常量和字符串常量
字符常量是单引号引起来的单个,字符串常量是双引号引起来的不限长度
由于java采用Unicode编码,每个字符占两个字节,因而可用天十六进制编码形式表示,当然也可以用一个中文表示(单个中文占用两个字节)
2)”常量”这个名次还会用在另外其他语境中表示值不可变的变量
2.java变量
java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。java程序中每一个变量都属于特定的数据类型,在使用前必需对其进行声明,声明格式为:type varName [=value]例如:int i=100;foloat f=12.3f;double d1,d2,d3=0.123;(声明了三个变量,其中d1,d2是默认值,d3=0.123)String s=”hello”
从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这块区域,因此,每一个变量使用前必需先声明,然后必需进行赋值,才能使用。
1)java变量分类
按被声明的位置划分:
局部变量:方法或语句块内部定义的变量,只能在被定义的方法或语句块内使用
成员变量:方法外部、类的内部定义的变量,可以在整个类中使用,包括类里的方法或语句块内也可以使用
注意:类外面是不能有变量的声明的
按所属的数据类型划分:
基本数据类型变量
引用数据类型变量
四、运算符
java语言支持如下运算符:
算术运算符:+-*/%++--
关系运算符:><>=<===!=
逻辑运算符:!&| ^&&||
位运算符:&| ^~>><<>>>
赋值运算符:=
拓展赋值运算符:+=-=*=/=
字符串链接运算符:+
三目条件运算符?:
1.算数运算符
注意:
1)
位运算符中的!、&、|、^跟罗技运算符相同,只是位运算符是对变量的二进制进行操作,我个人是用不到的,所以不在这里多做介绍
2)
++(—)
在前时先运算再取值
在后时先取值再运算
2.逻辑运算符
例如:
3.扩展赋值运算符
4.字符串连接符
“+”运算符两侧的操作数中只要有一个是字符串类型,系统会自动将另一个操作数转换为字符串然后进行连接,例如:
4+ 5= 94+“ab”=“4ab”
5.三目条件运算符
语法格式: x? y: z其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值。
五、表达式和语句
1.表达式
表达式是符合一定语法规则的运算符和操作数的序列,例如:a5.0+ a(a– b)* c– 4i< 30&& i%10!=0
1)表达式的类型和值
表达式中的操作数进行运算得到的结果称为表达式的值
表达式值的数据类型即为表达式的类型
2)表达式的运算顺序
应按照运算符的优先级从高到低的顺序进行
优先级相同的运算符按照实现约定的结合方式进行
我个人觉得运算顺序这块是可以忽略的,首先我的逻辑思维能力不是特别强,另外我的记性也不是特别好,所以如果我需要在表达式中区分优先级的话我会选择加括号。但是我觉得对于一些比较复杂且关键的逻辑运算,如果个人逻辑运算能力加记忆都比较好可以保证不出错的话,善用罗技运算符优先级未尝不是一种不让别人看懂你代码copy的手段。算是一种小小的防护吧,反正我这种人是不会去尝试分析这种代码的,太累
2.分支(条件)语句
ifif… elseif… else if… else ifif… else if… else if…else
switch(){case xx:
……………case xx:
……………default:
……………}
1.java中switch语句只能探测int类型的值(char类型的值也可以,因为他可以转换城int类型)
2.小心case穿透,所以最好与break连用
3.多个case可以连用,如下的示例代码也可以这样写(当i=1,2,18都会输出18):
3.循环语句
for(…;…;…){……}while(…){……}先判断再执行大括号里面的内容,然后再判断是否要继续执行do{……} whille(…);先执行大括号里面的内容再判断是否要继续执行
4.break& continue语句
break语句用于终止某个语句块的执行。用在循环体语句中么可以强行退出循环continue语句用在循环体语句中,用于终止某次循环过程,跳过循环中continue语句下面未执行的循环,开始下一次循环过程
八、方法
java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段,声明格式:[修饰符1修饰符2…]返回值类型方法名(形式参数列表){
java语句}
形式参数:在方法被调用时用于接受外界输入的数据
实参:调用方法时实际纯给方法的数据
返回值:方法在执行完毕后返回给调用他的环境的数据
返回值类型:实现约定的返回值的数据类型,如无返回值,必需给出返回值类型void
java语言中调用方法:对象名.方法名(实参列表)
实参的数目、数据类型和次序必需和所调用方法声明的形参列表匹配
return语句终止方法的运行并指定要返回的数据
java中进行函数调用传递参数时,遵循值传递的原则:
基本类型传递的是该数据值本身,引用累心美国传递的是对对象的引用,而不是对象本身
例子中的方法1,前面定义的数据类型为void,所以方法中不能有return返回值,方法4中因为有return返回值,所以前面必需定义为返回值的类型,也就是m4前面那个int
九、递归调用
递归调用是指在方法执行过程中出现该方法本身的调用
先看一个例子,这是一个简单的递归调用:
简单分析下:
1.首先main主方法中输出字符串,内容是test方法当参数等于5的时候的返回值2.然后将参数5传入test方法,返回值是:5* test(4)3.再次将参数4传入test方法中,返回值是:4* test(3)4.再将参数3传入test方法中,返回值是:3* test(2)5.再讲参数2传入test方法中:返回值是:2* test(1)6.再将参数1传入到方法中:返回值是:1然后程序开始往回走,返回值传入test(1)中得到2*1再往回走,将刚刚得到的2*1传入到test(2)中得到3*2*1还要往回走,将刚刚得到的3*2*1传入到test(3)中得到4*3*2*1还要往回走,将刚刚得到的4*3*2*1传入到test(4)中也就是test(5)的返回值,得到5*4*3*2*1最后将test5的返回值传入到我们的主方法输出于语句中5*4*3*2*1=120,那么我们的输出语句输出的应该为120
这就是简单的递归调用的例子了
再来看一个例子:
非递归的写法:
请自行领悟
最后奉上java基础语法完整学习路线图,除此之外还有精心整理的其他java学习路线图,学习书籍电子书,阿里巴巴手册,视频教程等即可点此领取:
https://zhuanlan.zhihu.com/p/6
java就业方向有哪些
JAVA的工作方向我认为由两个因素决定,一是个人意识,也就是个人的求职意愿;二是技术能力,所谓“没有金刚钻,不揽瓷器活”说的就是这个道理。职位永远同个人业务能力相匹配,同样,只有在自己喜欢、擅长的领域,才能将个人价值和企业效益最大化。
关于Java工作方向的建议,我主要从知识掌握情况和技能胜任度进行举例说明,大致分为四大阶段:Java基础、Javaweb、Java框架、Java+云数据,希望对大家的学习和求职就业有一定帮助。
第一阶段:Java基础
掌握基本语法、面向对象、常用类、正则、集合、Io流、多线程、Nio、网络编程、JDK新特性、函数式编程。
可胜任工作(工作方向):数据采集与嵌入式交互,负责公司业务平台开发和维护工作,根据需求,独立、快速、高质量完成技术开发编程任务;参与核心代码编写工作,负责数据库及相关端口的设计及开发等。
核心知识点:
DOS命令,JAVA发展简史,JAVA体系,JAVA的特性
安装jdk,配置环境变量,安装编译工具,第一个HelloWorld
文档注释,单行注释,多行注释
二进制,进制转换
标识符,命名规则,命名习惯,关键字,保留字
八种基本数据类型,常量,变量,运算符,表达式
执行语句, if语句, switch case语句
while, do-while循环
循环,特殊流程控制
方法,方法重载,递归算法
OOP(面向对象的设计思想)
对象的创建和内存,构造方法的定义, this关键字
封装和集成, static,super关键字
方法重写
访问权限,转型和多态, Object类
final关键字
Eclipse,数组, Arrays工具类,可变参数,二维数组,内部类,设计模式
单例设计模式,工厂设计模式
包装类和字符串
正则表达式,枚举
泛型, Iterator迭代, List接口, Set,Map,Collections
File,IO流,转换流
缓冲流,内存流
对象流, Properties类,装饰者设计模式
多线程的三种实现,线程的常用方法,线程的生命周期,线程同步
网络编程, TCP/IP,UDP
NIO, Channel,Buffer
Selector,FileChannel
JDK8新特性
JDK9新特性
JDK10新特性
反射
第二阶段:Javaweb
掌握数据库(MySQL)、前端(Html5、CSS3、JS、BootStrap、jQuery)、后端技术(Servlet、Filter、Listener、JSP)、会话跟踪技术(Cookie、Session)、版本控制器(SVN)、在线支付等技能。
可胜任工作(工作方向):能根据产品需求和组长设计的方案独立完成代码编写,熟悉高并发、海量数据系统经验,能持续对自己系统进行调优。
核心知识点:
数据库简介和安装, DML操作, DQL查询数据
数据的完整性,多表查询
视图,索引
SQL注入,批处理,数据库事务
C3P0连接池, Druid连接池
DBUtils工具类封装
Html简介, Html基本标签, Html表单标签
CSS简介, CSS导入方式, CSS选择器, CSS属性
CSS盒子模型, CSS扩展属性
Bootstrap
SVN
JavaScript基本语法
函数,弹窗函数,事件, JavaScript正则表达式
JavaScript的 DOM,BOM
JavaScript定时任务
Tomcat,XML
Dom4j解析 XML
SAX解析
XML生成
Http协议
Servlet生命周期
Servlet跳转
HttpServletRequest,HttpServletResponse
Servlet新特性
Cookie,Session
URL重写
过滤器 Filter,监听器 Listener
Jsp,Jsp内对象
EL表达式, JSTL
JSON语法,JSON解析, JSON生成
Gson,FastJson,Jackson工具
Ajax简介, Ajax工作原理, Ajax核心
Ajax综合案例
jQuery概述, jQuery作用,jQuery引用
jQuery语法, jQuery选择器,jQuery时间
jQuery效果, jQuery HTML
jQuery Ajax, jQuery插件
Validate插件, Moment插件
MVC模式
第三阶段:Java框架
掌握主流的企业级框架,开发和管理工具(Maven、Git、Idea)、Spring、webMVC框架(SpringMVC、Struts2)、ORM框架(Hibernate、MyBatis)、权限管理(Shiro)、工作流(Activite)、POI、Echarts、Spring新特性等。
可胜任工作(工作方向):常见中小型互联网项目开发, OA/CRM/ERP系统开发, APP服务端开发等等,可胜任中高级Java开发工程师。
核心知识点:
Maven和 Maven私服Nexus
IntellijIDEA
MarkDown
Git
LayUI
Mybatis
Spring5
SpringMVC
Struts2
Hibernate
Hibernate Validate
HttpClient
RESTful API
Shiro
Activiti
POI
Echarts
第四阶段:Java+云数据
完成金融/电商类大型分布式项目/APP服务端项目等。
可胜任工作(工作方向):可负责开发框架的搭建、改进、跟踪管理方案落地实施,指导开发人员开发工作,管控代码质量。对关键模块的代码编写与集成对java架构体系,主流开源框架有深入研究,对微服务技术有大项目实践经验。熟悉常用的中间件、数据库,对分库分表技术、消息中间件、分布式框架等。
项目架构演进
Linux常用命令
Linux安装 JDK,MySQL
Nginx安装,负载均衡,反向代理
Redis安装,常见数据类型
Redis集群,高可用
SpringDataRedis
Zookeeper
Dubbo
WebMagic
Quartz
FreeMarker
OSS
CAS单点登录
SpringBoot
Thymeleaf
MyCat
KeepAlive
Elasticsearch
Solr
ActiveMQ
RabbitMQ
RocketMQ
FastDFS
Oracle
Docker
SpringCloud Eureka
SpringCloud Ribbon
SpringCloud Feign
SpringCloud Hystrix
SpringCloud Zuul
SpringCloud Config
SpringCloud ZipKin
SpringCloud Sleuth
SpringBoot Admin
Jenkins
ELK
GitLab Runner
Kuberntes
Zbus
微信小程序
微信公众号
微信支付
微信提现
java里递归和迭代分别是什么算法啊
迭代是普通的循环。
例:求从1加到10
int sum=0
for(int i=0;i<= 10;i++){
sum=sum+i;
}
递归是指一个函数直接或间接调用自己。
好比:从前有个庙庙里有个大和尚和小和尚,大和尚叫小和尚讲故事,小和尚说从前有个庙庙里有个大和尚和小和尚,小和尚叫大和尚讲故事,大和尚说从前....
递归的特点:
必有三个条件:
1.间接或直接调用自己。
2.一定要有退出的条件(比方说大和尚口干了不听故事了)。否则就是死循环
3。要有逻辑体(想要做的事);
public int sum(int x){
if(x<=0){
return x;
}
return x+sum(x-1);
}
int s=10;
int total=sum(s);
该例中,sum函数总是调用自己,return x+sum(x-1);
sum有退出条件, x<=0
最后的结果是把 10+9+8+7+... 1返回
在很多种情况下,迭代和递归都可以完成相同的功能,不过递归有些功能迭代就完成不了。并且代码没有递归简洁,熟练使用递归后能提高代码质量。
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!