程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中遞歸道理實例剖析

Java中遞歸道理實例剖析

編輯:關於JAVA

Java中遞歸道理實例剖析。本站提示廣大學習愛好者:(Java中遞歸道理實例剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中遞歸道理實例剖析正文


本文實例剖析了Java中遞歸道理。分享給年夜家供年夜家參考。詳細剖析以下:

說明:法式挪用本身的編程技能叫做遞歸。

法式挪用本身的編程技能稱為遞歸( recursion)。遞歸做為一種算法在法式設計說話中普遍運用。 一個進程或函數在其界說或解釋中有直接或直接挪用本身的一種辦法,它平日把一個年夜型龐雜的成績層層轉化為一個與原成績類似的范圍較小的成績來求解,遞歸戰略只需大批的法式便可描寫出解題進程所須要的屢次反復盤算,年夜年夜地削減了法式的代碼量。遞歸的才能在於用無限的語句來界說對象的無窮聚集。
 
遞歸的三個前提:

       界限前提
       遞歸進步段
       遞歸前往段
       當界限前提不知足時,遞歸進步;當界限前提知足時,遞歸前往。
 
上面經由過程兩個示例法式來講明:

應用java代碼求5的階乘。(5的階乘=5*4*3*2*1)

/**
 * 盤算5的階乘(result = 5*4*3*2*1)
 * @author pplsunny
 * 
 * 
 */
public class Test01 {
  public static void main(String[] args) {
    System.out.println(f(5));
  }
  public static int f(int n) {
    if (1 == n)
      return 1;
    else
      return n*(n-1);
  }
}

此題中,依照遞歸的三個前提來剖析:

(1)界限前提:階乘,乘到最初一個數,即1的時刻,前往1,法式履行究竟;
(2)遞歸進步段:以後的參數不等於1的時刻,持續挪用本身;
(3)遞歸前往段:從最年夜的數開端乘,假如以後參數是5,那末就是5*4,即5*(5-1),即n*(n-1)
 
應用Java代碼求數列:1,1,2,3,5,8......第40位的數

/** 
 * 求數列:1,1,2,3,5,8......第40位的數 
 * @author pplsunny 
 *  
 */  
public class Test_Fibonacci {  
  public static void main(String[] args) {  
    System.out.println(f(6));  
  }  
  public static int f(int n ) {  
    if (1== n || 2 == n)   
      return 1;  
    else  
      return f(n-1) + f(n-2);  
  }  
}  

此題的沖破口在:從第3位數開端,本位數是前兩位數的和。要盤算第若干位的值,那末就須要將位數作為參數傳進辦法停止盤算。

(1)起首,當位數為1和2時,以後前往的值應當是1;

(2)然後,當位數為3時,前往值應當=2=1+1;
                 當位數為4時,前往值=3=2+1;
                 當位數為5時,前往值=5=3+2;
                 當位數為6時,前往值=8=5+3;
                 ......
(3)由(2)得知,年夜於等於3的情形下,以後位數(n)的數值=f(n-1)+f(n-2)

心得:有些初學者能夠以為遞歸等於本身挪用本身,那豈不是逝世輪回了。對,假如遞歸寫的不公道,那就是逝世輪回了。然則假如寫的公道,加上“界限前提”,法式履行究竟的時刻,會逐層前往。就像我們登山一樣,我們繞著山路爬上一層又一層,假如沒有山頂,我們會一向往上爬。但假如到了山頂,就依照上山時刻的步調一層一層的往下爬。

願望本文所述對年夜家的java法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved