最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

代碼功能:

1.Java實(shí)現(xiàn)(完整源碼附測(cè)試用例);
2.求解兩個(gè)非負(fù)整數(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);
 }
}

運(yùn)行截圖:

代碼解釋:

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

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

遞歸法 gcd2(p,q)

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

代碼心得:

關(guān)于循環(huán)法,一開始我想到的是,寫一個(gè)求解公約數(shù)的方法、用整型數(shù)組存儲(chǔ)一個(gè)非負(fù)整數(shù)的全部公約數(shù),然后比較找出p、q中共同的那個(gè)最大的公約數(shù)也就是兩個(gè)數(shù)的最大公約數(shù)了,后來(lái)想想,既然是求最大,那么就直接從后往前遞減豈不是更省事兒,從后往前遞減就可以保證這個(gè)數(shù)一直是當(dāng)前最大,因?yàn)楸人蟮募一锒疾环蠗l件(能同時(shí)被p、q整除)被淘汰掉了啦,就免去了最初需要的找最大這個(gè)麻煩,雖然求最大值方法多多,但是如果自己已經(jīng)或者原本就是就不需要去證明和尋找了哈哈,怎么感覺有點(diǎn)在說哲學(xué) ;

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

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

參考資料

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

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

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • spring中的BeanFactory與FactoryBean的講解

    spring中的BeanFactory與FactoryBean的講解

    今天小編就為大家分享一篇關(guān)于spring中的BeanFactory與FactoryBean的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • Springboot獲取jar包中resources資源目錄下的文件

    Springboot獲取jar包中resources資源目錄下的文件

    今天在項(xiàng)目中遇到一個(gè)業(yè)務(wù)場(chǎng)景,需要用到resources資源目錄下的文件,本文主要介紹了Springboot獲取jar包中resources資源目錄下的文件,感興趣的可以了解一下
    2023-12-12
  • springboot如何重定向外部網(wǎng)頁(yè)

    springboot如何重定向外部網(wǎng)頁(yè)

    這篇文章主要介紹了springboot如何重定向外部網(wǎng)頁(yè),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • seata springcloud整合教程與遇到的坑

    seata springcloud整合教程與遇到的坑

    seata 是alibaba 出的一款分布式事務(wù)管理器,他有侵入性小,實(shí)現(xiàn)簡(jiǎn)單等特點(diǎn)。這篇文章主要介紹了seata springcloud整合教程與遇到的坑,需要的朋友可以參考下
    2021-07-07
  • SpringBoot深入分析講解監(jiān)聽器模式下

    SpringBoot深入分析講解監(jiān)聽器模式下

    監(jiān)聽器模式,大家應(yīng)該并不陌生,主要的組成要素包括了事件、監(jiān)聽器以及廣播器;當(dāng)事件發(fā)生時(shí),廣播器負(fù)責(zé)將事件傳遞給所有已知的監(jiān)聽器,而監(jiān)聽器會(huì)對(duì)自己感興趣的事件進(jìn)行處理
    2022-07-07
  • Java中Scanner類基礎(chǔ)使用、可能遇到的問題及注意事項(xiàng)

    Java中Scanner類基礎(chǔ)使用、可能遇到的問題及注意事項(xiàng)

    Scanner類是一個(gè)用于Scanner指的是java.util包下的Scanner類,可以接收控制臺(tái)輸入的數(shù)據(jù),這篇文章主要介紹了Java中Scanner類基礎(chǔ)使用、可能遇到的問題及注意事項(xiàng)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • SpringBoot同時(shí)集成Mybatis和Mybatis-plus框架

    SpringBoot同時(shí)集成Mybatis和Mybatis-plus框架

    在實(shí)際開發(fā)中,項(xiàng)目里面一般都是Mybatis和Mybatis-Plus公用,但是公用有版本不兼容的問題,本文主要介紹了Spring Boot項(xiàng)目中同時(shí)集成Mybatis和Mybatis-plus,具有一檔的參考價(jià)值,感興趣的可以了解一下
    2024-12-12
  • 快速入門HarmonyOS的Java UI框架的教程

    快速入門HarmonyOS的Java UI框架的教程

    這篇文章主要介紹了快速入門HarmonyOS的Java UI框架,本文給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • SpringMVC的最小化配置說明

    SpringMVC的最小化配置說明

    這篇文章主要介紹了SpringMVC的最小化配置說明,Spring MVC是一個(gè)基于Java的Web框架,用于構(gòu)建靈活、高效的Web應(yīng)用程序,它采用了MVC的設(shè)計(jì)模式,將應(yīng)用程序的邏輯分為模型、視圖和控制器三個(gè)部分,以實(shí)現(xiàn)代碼的分離和重用,需要的朋友可以參考下
    2023-10-10
  • IDEA 集成log4j將SQL語(yǔ)句打印在控制臺(tái)上的實(shí)現(xiàn)操作

    IDEA 集成log4j將SQL語(yǔ)句打印在控制臺(tái)上的實(shí)現(xiàn)操作

    這篇文章主要介紹了IDEA 集成log4j將SQL語(yǔ)句打印在控制臺(tái)上的實(shí)現(xiàn)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧
    2021-02-02

最新評(píng)論

金塔县| 闽清县| 新营市| 福州市| 淮安市| 电白县| 越西县| 阳城县| 正镶白旗| 郧西县| 镇原县| 黑山县| 上杭县| 松滋市| 盐山县| 安泽县| 丰台区| 锡林浩特市| 衡南县| 黄梅县| 湖口县| 托克托县| 察隅县| 岑溪市| 乐陵市| 新余市| 广元市| 濮阳市| 浮山县| 垦利县| 溧水县| 藁城市| 樟树市| 灵山县| 新龙县| 七台河市| 孟村| 龙山县| 黑河市| 聂荣县| 高密市|