使用java实现几个递归函数

 1 public class Recursive {
 2 
 3     /**
 4      * @author hanxin
 5      * 标题:实现几个递归函数【阶乘函数、Fibonacci、Ackerman】
 6      * 参考:http://wenwen.soso.com/z/q364050302.htm【注:资料引用只是标明出处,具体是不是这样,hanxin我也不了解】
 7      * 网友A问: 所有递归问题都可以用循环来解决吗?
 8      * 网友B答:...
 9      * 网友C答: 递归调用是函数自己调用自己,具体过程中,编译器帮我们做了很多中间变量保存和数值传输工作,
10      *     你可以自己用循环来实现,但是那些编译器作的工作都得你自己来做,麻烦且容易出错。
11      *     除非对效率吹毛求疵,否则不建议你用循环来替代递归调用。
12      */
13     
14     //阶乘函数1*2*3*4【当然这也可以用循环来做】
15     public static int factorial(int n)
16     {
17         if(n==1)//终止条件
18         {
19             return 1;
20         }
21         else
22         {
23             return factorial(n-1)*n;//递归
24         }
25     }
26     //循环方式
27     public static int factorial2(int n)
28     {
29         int product=1;
30         for(int i=1;i<=n;i++)
31         {
32             product*=i;
33         }
34         return product;
35     }
36     
37     
38     //Fibonacci数列 0,1,1,2,3...从第三个数开始,每个数是前边两个数的和【如果谁有循环方式实现不妨留个言分享一下】
39     public static int fibonacci(int n)
40     {
41         if(n==0)
42         {
43             return 0;
44         }
45         else if(n==1)
46         {
47             return 1;
48         }
49         else
50         {
51             return fibonacci(n-1)+fibonacci(n-2);
52         }
53     }
54     
55     //Ackerman函数【这个函数在运行时报错,有实现过这个函数的朋友可以做贡献一下代码吗?谢谢】
56     public static int Ackerman(int m,int n)
57     {
58         if(m==0)
59         {
60             return n+1;
61         }
62         else if(n==0)
63         {
64             return Ackerman(m-1,1);
65         }
66         else
67         {
68             return Ackerman(m-1,Ackerman(m,n-1));
69         }
70     }
71     
72     /**
73      * @param args
74      */
75     public static void main(String[] args) {
76         // TODO Auto-generated method stub
77         int fac=factorial(5);
78         System.out.println(fac);
79         
80         int fac2=factorial2(5);
81         System.out.println(fac2);
82         
83         
84         int fib=fibonacci(6);
85         System.out.println(fib);
86         
87 //        int ack=Ackerman(5, 1);
88 //        int ack1=Ackerman(0, 4);
89         int ack2=Ackerman(5, 0);
90         System.out.println("ack"+"\t"+"ack1"+"\t"+ack2);
91     }
92 
93 }
View Code

 

 

小小程序员--一直很安静的我。

posted on 2013-09-02 21:51  一直很安静的我  阅读(1287)  评论(0编辑  收藏  举报

导航