JAVA如何理解递归

JAVA如何理解递归,第1张

1、递归做为一种算法在程序设计语言中广泛使用,是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象。

2、递归算法一般用于解决三类问题:

1)数据的定义是按递归定义的。(Fibonacci(斐波那契)的函数)

2)问题解法按递归算法实现。(回溯)

3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)

1增加\x0d\String s1="insert into tableNames (id,name,password) values(myseqnextval,,);"\x0d\ClassforName(driver);\x0d\Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);\x0d\PreparedStatement prepStmt = connprepareStatement(s1);\x0d\prepStmtsetString(1,name);\x0d\prepStmtsetString(2,password);\x0d\ResultSet rs=stmtexecuteUpdate();\x0d\2、删除\x0d\String s2="delete from tbNames where name=";\x0d\ClassforName(driver);\x0d\Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);\x0d\PreparedStatement prepStmt = connprepareStatement(s2);\x0d\prepStmtsetString(1,name);\x0d\ResultSet rs=stmtexecuteUpdate();\x0d\3、修改\x0d\String s3=“update tbNames set name= where id=”;\x0d\ClassforName(driver);\x0d\Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);\x0d\PreparedStatement prepStmt = connprepareStatement(s3);\x0d\prepStmtsetString(1,name);\x0d\prepStmtsetString(2,id);\x0d\ResultSet rs=stmtexecuteUpdate();\x0d\4、查询\x0d\String s4="select id,name,password from tbNames";\x0d\ClassforName(driver);\x0d\Connection conn = DriverManagergetConnection(url,dbUser,dbPwd);\x0d\Statement stmt=conncreateStatement();\x0d\ResultSet rs = stmtexecuteQuery(s4);\x0d\while(rsnext){\x0d\int id=rsgetInt(1);\x0d\String name = rsgetString(2);\x0d\String pwd=rsgetString(3);\x0d\Systemoutprintln(id+name+pwd); } \x0d\\x0d\以上四步必须都得关闭连接;!!!\x0d\rsclose();\x0d\stmtclose();\x0d\connclose();

递归就是自身调用自身,通过下面函数可以实现1++n;

public static int calculate(int n){

if(i==1){

return 1;

}else{

return n+calculate(n-1);

}

}

自己调用自己或几个方法相互调用。

最经典的是求正整数阶的算法:

int fact(int i){

if(i<=1)return 1;

return fact(i-1)i;

}

多数递归方法可以转换成非递归方法。

一般同功能的非递归方法,执行效率要优于递归方法。但合理的使用递归方法,可以使代码结构更清晰,更有可读性,从而更方便维护。

Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

//将数据库中的数据条数分段 public void division(){ //获取要导入的总的数据条数 String sql3="SELECT count() FROM [CMD][dbo][mycopy1]"; try { pss=consprepareStatement(sql3); rss=pssexecuteQuery(); while(rssnext()){ Systemoutprintln("总记录条数:"+rssgetInt(1)); sum=rssgetInt(1); } //每30000条记录作为一个分割点 if(sum>=30000){ n=sum/30000; residue=sum%30000; }else{ residue=sum; } Systemoutprintln(n+" "+residue); } catch (SQLException e) { // TODO Auto-generated catch block eprintStackTrace(); } }线程类public MyThread(int start,int end) { thisend=end; thisstart=start; Systemoutprintln("处理掉余数"); try { Systemoutprintln("--------"+ThreadcurrentThread()getName()+"------------"); ClassforName(SQLSERVERDRIVER); Systemoutprintln("加载sqlserver驱动"); cons = DriverManagergetConnection(CONTENTS,UNS,UPS); stas = conscreateStatement(); Systemoutprintln("连接SQLServer数据库成功!!"); Systemoutprintln("加载mysql驱动"); ClassforName(MYSQLDRIVER); con = DriverManagergetConnection(CONTENT,UN,UP); sta = concreateStatement(); // 关闭事务自动提交 consetAutoCommit(false); Systemoutprintln("连接mysql数据库成功!!"); } catch (Exception e) { eprintStackTrace(); } // TODO Auto-generated constructor stub } public ArrayList<Member> getAll(){ Member member; String sql1="select from (select row_number() over (order by pmcode) as rowNum," + " from [CMD][dbo][mycopy1]) as t where rowNum between "+start+" and "+end; try { Systemoutprintln("正在获取数据"); allmembers=new ArrayList(); rss=stasexecuteQuery(sql1); while(rssnext()){ member=new Member(); membersetAddress1(rssgetString("address1")); membersetBnpoints(rssgetString("bnpoints")); membersetDbno(rssgetString("dbno")); membersetExpiry(rssgetString("expiry")); membersetHispoints(rssgetString("hispoints")); membersetKypoints(rssgetString("kypoints")); membersetLevels(rssgetString("levels")); membersetNames(rssgetString("names")); membersetPmcode(rssgetString("pmcode")); membersetRemark(rssgetString("remark")); membersetSex(rssgetString("sex")); membersetTelephone(rssgetString("telephone")); membersetWxno(rssgetString("wxno")); membersetPmdate(rssgetString("pmdate")); allmembersadd(member); // Systemoutprintln(membergetNames()); } Systemoutprintln("成功获取sqlserver数据库数据!"); return allmembers; } catch (SQLException e) { // TODO Auto-generated catch block Systemoutprintln("获取sqlserver数据库数据发送异常!"); eprintStackTrace(); } try { rssclose(); stasclose(); } catch (SQLException e) { // TODO Auto-generated catch block eprintStackTrace(); } return null; } public void inputAll(ArrayList<Member> allmembers){ Systemoutprintln("开始向mysql中写入"); String sql2="insert into testmycopy2 values (,,,,,,,,,,,,,)"; try { ps=conprepareStatement(sql2); Systemoutprintln("-------------------------等待写入数据条数: "+allmemberssize()); for(int i=0;i<allmemberssize();i++){ pssetString(1, allmembersget(i)getPmcode()); pssetString(2, allmembersget(i)getNames()); //Systemoutprintln(allmembersget(i)getNames()); pssetString(3, allmembersget(i)getSex()); pssetString(4, allmembersget(i)getTelephone()); pssetString(5, allmembersget(i)getAddress1()); pssetString(6, allmembersget(i)getPmdate()); pssetString(7, allmembersget(i)getExpiry()); pssetString(8, allmembersget(i)getLevels()); pssetString(9, allmembersget(i)getDbno()); pssetString(10, allmembersget(i)getHispoints()); pssetString(11, allmembersget(i)getBnpoints()); pssetString(12, allmembersget(i)getKypoints()); pssetString(13, allmembersget(i)getWxno()); pssetString(14, allmembersget(i)getRemark()); //插入命令列表 //psaddBatch(); psexecuteUpdate(); } //psexecuteBatch(); concommit(); psclose(); conclose(); thisflag=false; Systemoutprintln(ThreadcurrentThread()getName()+"--->OK"); } catch (SQLException e) { // TODO Auto-generated catch block Systemoutprintln("向mysql中更新数据时发生异常!"); eprintStackTrace(); } } @Override public void run() { // TODO Auto-generated method stub while(true&&flag){ thisinputAll(getAll()); } }

递归的问题好解决,只是你的这个问题,貌似不好理解。你好像是想通过递归程序来判定一个类的成员变量的复杂对象里面最底层的对象类型是什么。你想通过递归程序来完成对类里面对象的查找功能,是么?你这个就有点类似eclipse里面CTRL+原始对象的功能了,做也能做,只是不知道你具体的需求是什么。

public

static

int

method(int

n){

if(n==1)

return

1;

else

return

nmethod(n-1);

}

当n=5时,执行return

nmethod(n-1);即5method(4)

在这里调用method(4),这时候n=4

当n=4时执行return

nmethod(n-1);即4method(3)

当n=3时执行return

nmethod(n-1);即3method(2)

当n=2时执行return

nmethod(n-1);即2method(1)

当n=1时执行return

1;返回到其上一次调用method的地方,即返回到2method(1),即21

然后21又返回到其上一次调用method的地方,即返回到3method(2),即321

就这样一层一层往上返回

最后就是54321

以上就是关于JAVA如何理解递归全部的内容,包括:JAVA如何理解递归、怎样编写一个java程序能通过jdbc访问数据库实现对数据库的插入、删除、修改和查询、什么是递归,用Java怎么实现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9867843.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存