码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员----java基础---递归概述、递归和循环的区别

时间:2015-06-11 09:31:48      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:递归   循环   java基础   递归与循环的区别   

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、递归函数,通俗的说就是函数本身自己调用自己... 

如:n!=n(n-1)! 
你定义函数f(n)=nf(n-1) 

而f(n-1)又是这个定义的函数。。这就是递归 

定义:程序调用自身的编程技巧称为递归( recursion)。
递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
 
二、为什么要用递归:递归的目的是简化程序设计,使程序易读 


三、递归的弊端:

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


四、
递归的三个条件:
1,边界条件
2,递归前进段
3,递归返回段
当边界条件不满足时,递归前进;当边界条件满足时,递归返回。


五、递归和循环的区别

1,递归:

<span style="background-color: rgb(255, 252, 246);"><span style="font-family:SimSun;font-size:18px;"><span style="white-space:pre">	</span>优点:代码简洁、清晰,并且容易验证正确性。
<span style="white-space:pre">	</span>缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,每次都要创建新的变量,需要增加额外的堆栈处理,会对执行效率有一定影<span style="white-space:pre">		</span>响,占用过多的内存资源。
2,循环:  
<span style="white-space:pre">	</span>优点:速度快,结构简单。
<span style="white-space:pre">	</span>缺点:并不能解决所有的问题。有的问题适合使用递归而不是循环。如果使用循环并不困难的话,最好使用循环。</span></span>

六,实例演示

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)+"头牛"); 

   } 

黑马程序员----java基础---递归概述、递归和循环的区别

标签:递归   循环   java基础   递归与循环的区别   

原文地址:http://blog.csdn.net/qiushi_1990/article/details/46452617

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!