大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 Java基礎學習:java怎么遞歸函數

Java基礎學習:java怎么遞歸函數

更新時間:2020-03-18 13:50:15 來源:動力節點 瀏覽2804次


  遞歸的思想


  以此類推是遞歸的基本思想。


  具體來講就是把規模大的問題轉化為規模小的相似的子問題來解決。在函數實現時,因為解決大問題的方法和解決小問題的方法往往是同一個方法,所以就產生了函數調用它自身的情況。另外這個解決問題的函數必須有明顯的結束條件,這樣就不會產生無限遞歸的情況了。


  遞歸的兩個條件


  可以通過遞歸調用來縮小問題規模,且新問題與原問題有著相同的形式。(自身調用)


  存在一種簡單情境,可以使遞歸在簡單情境下退出。(遞歸出口)


  遞歸三要素:


  一定有一種可以退出程序的情況;


  總是在嘗試將一個問題化簡到更小的規模


  父問題與子問題不能有重疊的部分


  遞歸:自已(方法)調用自已


  例子:用遞歸把目錄下所有的目錄及文件全部顯示出來

  publicclassB{

  publicstaticvoidmain(String[]args){

  Filefile=newFile("f:\\123");

  listAllFile(file);

  }

  publicstaticvoidlistAllFile(Filefile){

  File[]strs=file.listFiles();

  for(inti=0;i<strs.length;i++){

  //判斷strs[i]是不是目錄

  if(strs[i].isDirectory()){

  listAllFile(strs[i]);//遞歸調用自己

  System.out.println("目錄="+strs[i].getName());

  }else{

  System.out.println("文件名="+strs[i].getName());

  }

  }

  }

  }

  遞歸算法的一般形式:

  func(mode){

  if(endCondition){//遞歸出口

  end;

  }else{

  func(mode_small)//調用本身,遞歸

  }

  }

  例子


  求一個數的階乘是練習簡單而典型的例子,階乘的遞推公式為:factorial(n)=n*factorial(n-1),其中n為非負整數,且0!=1,1!=1


  我們根據遞推公式可以輕松的寫出其遞歸函數:

  publicstaticlongfactorial(intn)throwsException{

  if(n<0)

  thrownewException("參數不能為負!");

  elseif(n==1||n==0)

  return1;

  else

  returnn*factorial(n-1);

  }

  遞歸的過程


  在求解6的階乘時,遞歸過程如下所示。


Java基礎學習:java怎么遞歸函數

  我們會驚奇的發現這個過程和棧的工作原理一致對,遞歸調用就是通過棧這種數據結構完成的。整個過程實際上就是一個棧的入棧和出棧問題。然而我們并不需要關心這個棧的實現,這個過程是由系統來完成的。


  那么遞歸中的“遞”就是入棧,遞進;“歸”就是出棧,回歸。


  我們可以通過一個更簡單的程序來模擬遞進和回歸的過程:

  /*

  關于遞歸中遞進和回歸的理解*/

  publicstaticvoidrecursion_display(intn){

  inttemp=n;//保證前后打印的值一樣

  System.out.println("遞進:"+temp);

  if(n>0){

  recursion_display(--n);

  }

  System.out.println("回歸:"+temp);

  }

  遞歸的例子


  斐波那契數列


  斐波那契數列的遞推公式:Fib(n)=Fib(n-1)+Fib(n-2),指的是如下所示的數列:


  1、1、2、3、5、8、13、21.....


  按照其遞推公式寫出的遞歸函數如下:

  publicstaticintfib(intn)throwsException{

  if(n<0)

  thrownewException("參數不能為負!");

  elseif(n==0||n==1)

  returnn;

  else

  returnfib(n-1)+fib(n-2);

  }

  遞歸調用的過程像樹一樣,通過觀察會發現有很多重復的調用。


Java基礎學習:java怎么遞歸函數


  歸并排序


  歸并排序也是遞歸的典型應用,其思想:將序列分為若干有序序列(開始為單個記錄),兩個相鄰有序的序列合并成一個有序的序列,以此類推,直到整個序列有序。

  //遞歸過程是:在遞進的過程中拆分數組,在回歸的過程合并數組

  publicstaticvoidmergeSort(int[]source,int[]temp,intfirst,intlast){

  if(first<last){

  intmid=(first+last)/2;

  mergeSort(source,temp,first,mid);//歸并排序前半個子序列

  mergeSort(source,temp,mid+1,last);//歸并排序后半個子序列

  merge(source,temp,first,mid,last);//在回歸過程中合并

  }elseif(first==last){//待排序列只有一個,遞歸結束

  temp[first]=source[first];

  }

  同樣調用過程向樹一樣,但是它并沒有重復調用的問題。在遞進的過程中拆分數組,在回歸的過程合并數組。通過遞歸來實現歸并排序,程序結構和條理非常清晰。

Java基礎學習:java怎么遞歸函數


    以上就是動力節點Java培訓機構小編介紹的“Java基礎學習:java怎么遞歸函數”的內容,希望對大家有幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 亚洲欧美在线播放 | 曰本还a大片免费无播放器 曰本黄色录像 | 男人天堂视频在线观看 | 免费看成人毛片日本久久 | 欧美区视频 | 亚洲国产一级a毛片 | 久久精品国产曰本波多野结衣 | 中文字幕亚洲日韩无线码 | 久久青草免费线观最新 | 不卡影视 | 影音先锋在线亚洲精品推荐 | 亚洲天堂一区 | 免费观看欧美成人禁片 | 天天摸天天操免费播放小视频 | 黄毛片免费| 图片亚洲va欧美va国产综合 | 91精彩视频 | 久久精品亚洲欧美va | 国产乱人伦偷精品视频不卡 | 神马视频我不卡 | 亚洲va精品中文字幕动漫 | 91精品国产色综合久久 | 中文字幕久久久久一区 | 日本爽 | 国产成人精品男人的天堂网站 | 国产精品久久久久免费视频 | 欧美亚洲综合在线 | 亚洲大胆精品337p色 | 不卡免费播放 | 四虎影院在线免费观看 | 看片一区| 亚洲图片国产日韩欧美 | 国产精品情侣久久婷婷文字 | 久久精品免费大片国产大片 | 最新777奇米影视四色 | 黄色成人一级片 | 99热久久国产精品免费观看 | 香蕉视频在线观看视频 | 毛片免费大全 | 中文字幕在线最新在线不卡 | 日韩欧美区 |