A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© z443863517 中级黑马   /  2016-10-16 02:04  /  640 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

java 递归函数

一、递归函数,通俗的说就是函数本身自己调用自己...
如:n!=n(n-1)!
你定义函数f(n)=nf(n-1)
而f(n-1)又是这个定义的函数。。这就是递归

二、为什么要用递归:递归的目的是简化程序设计,使程序易读

三、递归的弊端:虽然非递归函数效率高,但较难编程,可读性较差。递归函数的缺点是增加了系统开销,也就是说,每递归一次,栈内存就多占用一截

四、递归的条件:需有完成任务的语句,需满足递归的要求(减小而不是发散)

五、递归进阶:
1.用递归算n的阶乘:
  分析:n!=n*(n-1)*(n-2)...*1
  public int dReturn(int n){
     if(n==1){
        return 1;
     }else{
        return n*dReturn(n-1);
     }
   }
2.用递归函数算出1到n的累加:1+2+3+4+..+n
  public int dReturn(int n){
    if(n==1){
      return 1;
    }else{
      return n+dReturn(n-1);
    }
  }
3.要求输出一个序列:1,1,2,3,5,8,11......(每一个数为前两个数子之和,要求用递归函数)
  用java递归来表示一个函数:F(n)=F(n-1)+F(n-2);F(0)=1;F(1)=1;
   分析:X1=1; X2=1; X3=X1+X2; X4=X2+X3; ... ; Xn=X(n-1)+X(n-2)
   public int F(int n){
    if(n==1){
      return 1;
    }else if(n==2){
      return 1;
    }else{
       return F(n-1)+F(n-2);
    }
  }  
4.java用递归方法反向打印一个整数数组中的各个元素
   public static void  printAll(int index,int[] arr){
      System.out.println(arr[index]);
      if(index > 0){
       printAll(--index,arr);
      }
   }  
   public static void main(String[] args){
      int[] arr={1,2,3,4,5};
      printAll(arr.lenth-1,arr);
   }
5.编程求解:若一头小母牛,从出生起第四个年头开始每年生一头母牛,按次规律,第 n 年时有多少头母牛?
   public static int cattle(int n){
if(n<=0){
  return 0;
}else if(n<=3){
  return 1;
}else{
  return cattle(n-1)+cattle(n-3);
}
   }
   public static void main(String[] args){
      int n=10;
      System.out.println(n+"年后共有"+cattle(n)+"头牛");
   }
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马