使用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 }
小小程序员--一直很安静的我。