递归函数及Java范例

来源:互联网 发布:java软件培训机构 编辑:程序博客网 时间:2024/05/22 16:43
首先看看这两篇文章:
递归函数之JAVA演绎--http://blog.csdn.net/lxgljj/archive/2004/10/21/145147.aspx
数据结构与面向对象程序设计—— C++版(第3版)  9.1 递归函数 --http://book.csdn.net/bookfiles/461/10046116316.shtml

如第二篇文章所说:

递归思想

假设一个问题有一个或多个分支条件,而其中的某些子任务是最开始时试图解决的同一问题的简单版本,那么这些子任务通过递归调用来解决。

函数在进行递归调用时,必须要有一个或多个分支条件,在这些分支条件内,整个计算不需要递归来完成。这些没有递归的分支条件称为停止条件或基本条件。


设计递归算法,一定要有结束的条件,同时找到反复出现的一个模式。

附上的Java代码中的代码单元来自上两篇文章,但是我综合在了一起
  1. //计算斐波那契数列
  2. class test1 {       
  3.     int func(int x) {
  4.             if (x > 2)
  5.               return (func(x - 1) + func(x - 2));
  6.             else
  7.               return 1;
  8.           } 
  9. }
  10. //计算若一头小母牛,从出生起第四个年头开始每年生一头母牛,按次规律,第n年时有多少头母牛?
  11. class test2 {
  12.        int cattle(int n){
  13.         if(n<=0return 0;
  14.         if(n<=3return 1;
  15.         return cattle(n-1)+ cattle(n-3); //此处是递归要好好理解。   
  16.       }
  17. }
  18. //纵向输出数字的每位
  19. class test3 {
  20.     void write_vertical(int number){    
  21.         if (number < 10)
  22.             System.out.println(number); // Write the one digit.
  23.         else  {
  24.             write_vertical(number/10); // Write all but the last digit.
  25.             System.out.println(number % 10); // Write the last digit.
  26.         }
  27.     }
  28. }
  29. public class recursion {
  30. public static void main(String[] args){
  31.     int x1 = 1;
  32.     int sum = 0;
  33.     int n = 5
  34.     test1 t1 = new test1();    
  35.     for (int i = 1; i <= n; i++) {
  36.       x1 = t1.func(i);
  37.       System.out.print(x1+":");
  38.       sum = sum + x1;
  39.     }
  40.     System.out.println("sum=" + sum);   
  41.     int catYear = 15;
  42.     test2 t2 = new test2();
  43.     System.out.println("test2:"+t2.cattle(catYear));
  44.     
  45.     int testNumber =1234;
  46.     test3 t3 = new test3();
  47.     System.out.println("test3:"+testNumber);
  48.     t3.write_vertical(testNumber);
  49.    }
  50. }