java关于递归
递归函数,即是调用一个函数的过程中出现直接或简介的调用该函数本身.此种函数就称为递归函数
递归函数的优点是程序简洁易懂,可读性强;缺点是需要调用大量的函数调用,消耗大量的内存和时间 一般来说,递归由函数出口和递归体两部分组成,递归出口给出了递归终止条件,递归体给出了递归的方式. 下面一例就是简单的递归: 求N的阶乘,即求1乘2乘3一直乘到N的乘积. 递归形式如下: f(1)=1 f(n)=f(n-1)*n 前者就是递归的出口,后者就是递归体 程序执行过程为:求f(4)反推到f(3),再反推到f(3),接着反推到f(2),最后反推到f(1),此时遇到递归出口,计算出f(1)=1,然后依次反推.f(2)=2*f(1)=2,f(3)=3*f(2)=3*2=6,f(4)=4*f(3)=4*6=24 程序代码实现: import javax.swing.JOptionPane; public class N { static int f(int x){ int s; if(x==1) s=1; else s=f(x-1)*x; return s; } public static void main(String[] args) { int n; N f=new N(); String s=JOptionPane.showInputDialog(null,"please input n:\n"); n=Integer.parseInt(s); System.out.print(N.f(n)); } } 下面是一个很典型的递归解决的问题,如果用其他方法编写,代码将很繁琐
汉罗塔问题:有N个大小不同的盘片放在A柱上(小的在上,大的在下),另有BC两柱.要求将这N个盘片从A搬到C上,搬动中,每次只能搬动一个盘片,而且小盘片不能放在大盘片之下 程序思想:假如要移动N个盘片,如果能先将上面的N-1个盘片从A借助C移到B上,那么再将最后那个盘片移到C上,然后在把N-1个盘片从B借助A移到C上,那么就行了 代码如下 import javax.swing.JOptionPane; public class Hanio { static void nuodong(int n,char A,char B,char C){ if(n==1) System.out.print("move"+n+"from"+A+"to"+C+"\n"); else{ nuodong(n-1,A,C,B); System.out.print("move"+n+"from"+A+"to"+C+"\n"); nuodong(n-1,B,A,C); } } public static void main(String[] args) { int n; String s=JOptionPane.showInputDialog(null,"please input n:\n"); n=Integer.parseInt(s); char A='A',B='B',C='C'; Hanio h=new Hanio(); Hanio.nuodong(n,A,B,C); } } 下面这个斐波那契数列也是用递归实现的(摘抄自其他网站) 斐波那契数列问题:列第n项,斐波那契数列第一和第二项是1,后面每一项是前两项之和,即1、1、2、3、5、8、13 import javax.swing.JOptionPane; public class Fibonacci { int F(int n) { if(n==0) return 1; else if(n==1) return 1; else if(n>1) return F(n-1)+F(n-2); /*递归*/ else JOptionPane.showMessageDialog(null,"方程无解!"); return 0; } public static void main(String[] args) { int i,n,m; Fibonacci f=new Fibonacci(); String s=JOptionPane.showInputDialog(null,"please input n:\n"); n=Integer.parseInt(s); for(i=0;i<=n;i++) { m=f.F(i); System.out.println(m); } } } |


wanyij
博客统计信息
热门文章
最新评论
友情链接


