欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java求解兩個非負整數(shù)最大公約數(shù)算法【循環(huán)法與遞歸法】

 更新時間:2018年03月25日 11:39:43   作者:Su_CRF  
這篇文章主要介紹了Java求解兩個非負整數(shù)最大公約數(shù)算法,結合實例形式分析了java求解最大公約數(shù)的實現(xiàn)方法,并附帶了循環(huán)法與遞歸法算法思路,需要的朋友可以參考下

本文實例講述了Java求解兩個非負整數(shù)最大公約數(shù)算法。分享給大家供大家參考,具體如下:

代碼功能:

1.Java實現(xiàn)(完整源碼附測試用例);
2.求解兩個非負整數(shù)p,q(p>=q)的最大公約數(shù);
3.循環(huán)法 以及 遞歸法兩種求解思路;

完整源碼:

/* GCD:Greateast Common Divisor */
public class GCD{
 public static void main(String args[]){
  /* Test Case */
  int p = 32;
  int q = 24;
  System.out.println("The greatest divisior of "+p+" and "+q+" is \n"+
   "[ gcd1 ] : "+gcd1(p,q)+"\n"+"[ gcd2 ] : "+ gcd2(p,q));
 }
 // (q % gcd ==0 AND p% gcd ==0 [gcd from q to 1])
 public static int gcd1(int p,int q){
  int gcd=1;
  int d=q;
  while(d>0){
   d--;
   if(q%d==0 && p%d==0){
    gcd = d;
    break;
   }
  }
  return gcd;
 }
 // gcd(p,q)=gcd(q,p%q)[if q=0,gcd=p]
 public static int gcd2(int p,int q){
  if(q==0) return p;
  int r = p%q;
  //System.out.println("("+q+","+r+")");
  return gcd2(q,r);
 }
}

運行截圖:

代碼解釋:

循環(huán)法 gcd1(p,q)

自然語言描述 :循環(huán)法求解兩個非負整數(shù)p,q(p>=q)的最大公約數(shù),即求解q的公約數(shù)中為p的公約數(shù)的最大值。令d(被除數(shù))從p開始遞減(遞減step = 1)d始終為“即將滿足條件的最大值”,當d滿足條件(既可以被p整除又可以被p整除時),d即p與q的公約數(shù),d即為p、q的最大公約數(shù);

遞歸法 gcd2(p,q)

自然語言描述: 遞歸法求解兩個非負整數(shù)p,q(p>=q)的最大公約數(shù) ,當q等于0時,最大公約數(shù)為p;否則,對p、q取余得r=p%q,p、q的最大公約數(shù)即為q、r的最大公約數(shù);

代碼心得:

關于循環(huán)法,一開始我想到的是,寫一個求解公約數(shù)的方法、用整型數(shù)組存儲一個非負整數(shù)的全部公約數(shù),然后比較找出p、q中共同的那個最大的公約數(shù)也就是兩個數(shù)的最大公約數(shù)了,后來想想,既然是求最大,那么就直接從后往前遞減豈不是更省事兒,從后往前遞減就可以保證這個數(shù)一直是當前最大,因為比它大的家伙都不符合條件(能同時被p、q整除)被淘汰掉了啦,就免去了最初需要的找最大這個麻煩,雖然求最大值方法多多,但是如果自己已經或者原本就是就不需要去證明和尋找了哈哈,怎么感覺有點在說哲學 ;

關于遞歸法,我能依靠我的直覺完全理解的還只有那句p、q的最大公約數(shù)就是q、r(r=p%q)的最大公約數(shù)這個環(huán)的開始,但是還是不太理解環(huán)的結束條件 q為0,返回p;

雖然是很簡單的求解最大公約數(shù)算法,但是非要用兩種思路來寫一下,主要還是為了再感受一下我不是很熟悉的遞歸法,以前看求解漢諾塔和斐波那契數(shù)的遞歸算法那明白白的公式亮在那里,就在感慨,這完全就是數(shù)學啊!今天學習到的這個,感觸居然比那時候還要震撼,不知道發(fā)生了什么問題奇妙地就解決了。我到時沒太在意什么內存啊、效率之類的指標,只是覺得能想到這個的家伙真的太聰明,對他們而言計算機也好、編程語言也好,真正做到了只是解決問題的工具。有人說,遞歸是讓人腦去思考讓計算機去計算的算法,感覺真的是很貼切的說法呢。

參考資料

圖靈程序設計叢書:算法(第4版) 塞奇威克 (Robert Sedgewick) (作者), 韋恩 (Kevin Wayne) (作者), 謝路云 (譯者)

更多關于java算法相關內容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結構與算法教程》、《Java操作DOM節(jié)點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設計有所幫助。

相關文章

  • SpringBoot2.動態(tài)@Value的實現(xiàn)方式

    SpringBoot2.動態(tài)@Value的實現(xiàn)方式

    這篇文章主要介紹了SpringBoot2.動態(tài)@Value的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot中通過AOP整合日志文件的實現(xiàn)

    SpringBoot中通過AOP整合日志文件的實現(xiàn)

    本文主要介紹了SpringBoot中通過AOP整合日志文件的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Java詳解實現(xiàn)多線程的四種方式總結

    Java詳解實現(xiàn)多線程的四種方式總結

    哈哈!經過一個階段的學習,Java基礎知識學習終于到多線程了!Java多線程以及后面互斥鎖的概念都是Java基礎學習的難點,所以我做了一個總結,希望對大家也有幫助
    2022-07-07
  • JAVA爬蟲實現(xiàn)自動登錄淘寶

    JAVA爬蟲實現(xiàn)自動登錄淘寶

    給大家分享一個關于JAVA爬蟲的相關知識點,通過代碼實現(xiàn)自動登錄淘寶網,有興趣的朋友測試下。
    2018-04-04
  • java?spring?mvc處理器映射器介紹

    java?spring?mvc處理器映射器介紹

    這篇文章主要介紹了java?spring?mvc處理器映射器,文章圍繞equestMapping解析映射介紹展開源碼內容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • Java中反射機制和作用詳解

    Java中反射機制和作用詳解

    這篇文章主要給大家介紹了關于Java中反射機制和作用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • Java各種比較對象的方式的對比總結

    Java各種比較對象的方式的對比總結

    比較對象是面向對象編程語言的一個基本特征.在本教程中,我們將介紹Java語言的一些特性,這些特性允許我們比較對象.此外,我們還將研究外部庫中的這些特性,需要的朋友可以參考下
    2021-06-06
  • 解析Java的Hibernate框架中的持久化類和映射文件

    解析Java的Hibernate框架中的持久化類和映射文件

    這篇文章主要介紹了Java的Hibernate框架中的持久化類和映射文件,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • Sentinel核心類之Entry類解讀

    Sentinel核心類之Entry類解讀

    這篇文章主要介紹了Sentinel核心類之Entry類解讀,Sentinel中Entry可以理解為每次進入資源的一個憑證,如果調用SphO.entry()或者SphU.entry()能獲取Entry對象,代表獲取了憑證,沒有被限流,否則拋出一個BlockException,需要的朋友可以參考下
    2023-12-12
  • Redis使用RedisTemplate模板類的常用操作方式

    Redis使用RedisTemplate模板類的常用操作方式

    這篇文章主要介紹了Redis使用RedisTemplate模板類的常用操作方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論