48Java中的递归练习

48Java中的递归练习

ID:41393799

大小:64.86 KB

页数:4页

时间:2019-08-24

48Java中的递归练习_第1页
48Java中的递归练习_第2页
48Java中的递归练习_第3页
48Java中的递归练习_第4页
资源描述:

《48Java中的递归练习》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java中的递归练习i.递归:在调用一个方法的过程中,又出现直接或者间接地调用该方法本身,称为方法的递归调用。(1)在调用方法f的过程中,又调用f方法,这是直接调用本方法;(2)在调用方法f的过程中,又调用了f2方法,而在调用f2方法中过程屮,又要调用f方法,这就是间接调用。最常见的就是在一个方法体内又调用了本身(直接)或者是调用了此方法的另外一个方法(间接)。注意:递归一定要明确条件,容易栈溢出StackOverflowExceptiono注意递归的次数,因为调用的方法都会进栈,调用多少次就会有多少个方法进入栈,如果递归次数过多,会导致栈溢出异常。如果一个方法重复调用,

2、且每次调用时,参与运算的结果与上一次调用有关,此时就可用递归来解决问题。2.练习题1•求sum=n+(n-l)+(n-2)++1packagedecember.datel;publicclassSum{publicstaticvoidmain(String[]args){〃下午5:5&19intsum;intnum=100;sum=fun(num);System.out.println("sum二”+sum);}privatestaticintfun(intnum){〃下午5:59:26if(num==1)return1;returnnum+fun(num・l.);num

3、=100;sum=5050.3.练习题2•就一个数的阶乘,即求n!・privatestaticlongfun(intn)throwsException{if(n<0)thrownewException("需要正数,,);if(n==1

4、

5、n==0)return1;intm=longresuIt=n*fun(m);returnresuIt;}4.练习题3.Hanio(汉诺)塔问题:packagedecember.datel;***汉诺塔问题分析:*64个盘子,从大到小,从下到上排列着,大的在下,小的在上,要从A处移到C处。*解决思路:移动64个到(:处,如果能够移动63个到

6、B处,然后把第64个移动到c处,再把63个移动到C处。*存在三步:事动63个从A处借助C移动到B处,*②移动第64个盘子到C处,始终都是从A处移动到C处;*③移动63个从B处借助A移动到C处即可。*按照递归思想,移动64个从A处到C处,那么只需要完成移动63个从一处移动到另一OOOOOOOO*从而移动3个从A处移到C处,收移动2个从A处到B处,再把第三个移动到C处,再把2个从B处移到C处,*移动2个从A处移动到C处,首先移动一个从A处移到B处,然后移动第二个从A处到C处,最后是从B处移动到C处。*最终究归结到把一个从一个地方移到另外一个地方,即可。*^authorAdmi

7、nistrator*/publicclassHanoiProblem{privatestaticintcount;//用丁•记录需耍多少次移动次数publicstaticvoidmain(String[]args){intnum=30;Stringfrom="one";Stringby=“two”;Stringto="three";soLveHanoiProbLem(nuby,to);System.out.println(count);}publicstaticvoidsolveHanoiProblem(intnum,Stringfrom.Stringby,Stringt

8、o){if(num<=0){System.out.printIn(“传入的数据有错谋或者没有盘子”);return;}if(num==1){rwove(from^to);return;}intm=num-1;soLveHanoiProbLem^m,from,to,by);//Jtlnum-1个从A处移到B处,利用C/nove(from>to);//把最下ihi的-个从A处移到(:处soLveHanoiProbLe/n(mby?from,to);//再把num-1个从B处移动到C处,利川A}privatestaticvoidmove(Stringfrom,Stringto)

9、{count++;System,out.printIn(from+"===>"+to);//简巾的•次移动动作}}移动30个,就需要1073741823次移动。如果num为x,次数为countl,则如果num变为x+1,则num就是num*2+1.次数是上次的两倍再加一。5・练习题4.删除一个文件夹(或者叫做删除目录)(里面包含文件和其他文件夹)。Windows系统中删除文件夹,都是从内往外删除,先把文件夹内部的删除后,再删除文件夹。这一点疋符合了递归的思想,递归止是一致通过反复的调用本身,直达最里面,然示再一步一步的往外走。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。