欢迎来到天天文库
浏览记录
ID:41393799
大小:64.86 KB
页数:4页
时间:2019-08-24
《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系统中删除文件夹,都是从内往外删除,先把文件夹内部的删除后,再删除文件夹。这一点疋符合了递归的思想,递归止是一致通过反复的调用本身,直达最里面,然示再一步一步的往外走。
此文档下载收益归作者所有