黑馬程序員-遞歸

---------------------- android培訓 、 java培訓、期待與您交流! ----------------------

 遞歸  是指在方法調用的過程中調用該方法自身的調用。 一般用在類似Fibonacci函數  樹狀結構的應用程序當中。

例如下面這個例子:求數列 1 ,1,2,3,5,8,13.......第n個數列的值

 

public class UserTest {

 public static void main(String[] args) {
  System.out.println(method(6));
 }

 private static int method(int i) {
  if(i == 1||i==2) return 1;
  
  else
  return method(i-1)+method(i-2);
 }

}

 

這就是一個簡單的遞歸程序,其調用過程爲:method(6)的 method(i-1)的調用過程:method(6)—method(5)—method(4)—method(3)—method(2),method(2)返回,調用method(1)—method(1)返回—method(3)調用完返回method(4)—調用method(4)的method(2)—method(2)返回—method(4)調用完返回method(5)—調用method(5)的method(3)—method(3)返回—method(5)調用完返回method(6),再執行method(6)的method(i-2)過程,與前面過程類似。最後method(6)調用完返回main()。

這是一個Fibonacci函數 形式遞歸。合理利用遞歸,會使我的程序變得簡潔高效。

 

當然上述程序也可以用普通方法實現,以下爲實現方式:

首先分析數列規律:第n個數的值爲n-1個數和n-2個數的值的和,所以我們設局部變量num1和num2 儲存這兩個數  numSum儲存他們的和

 

private static long number(int i){
  if(i==1||i==2) return 1;
  
  long num1=1L;
  long num2=2L;
  long numSum=0;
  for(int j =1;j<i-2;j++){

//每次循環,把n-1那個數的值賦給n-2那個數的值,他們的和賦給n-1那個數的值
   numSum=num1+num2;
   num1=num2;
   num2=numSum;
   
   
  }
  
  return numSum;
 }

通過對比,可以發現遞歸方式實現起來簡單很多。

 

---------------------- android培訓 、java培訓 、期待與您交流! ----------------------

詳細請查看:http://edu.csdn.net/heima 

發佈了32 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章