日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java的递归算法

發(fā)布時間:2023/12/13 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java的递归算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
遞歸算法設(shè)計的基本思想是:對于一個復(fù)雜的問題,把原問題分解為若干個相對簡單類同的子問題,繼續(xù)下去直到子問題簡單到可以直接求解,也就是說到了遞推的出口,這樣原問題就有遞推得解。
關(guān)鍵要抓住的是:
(1)遞歸出口
(2)地推逐步向出口逼近
樣例:
example: 求5的階乘。。??????
??
例如以下:???
??
Java代碼
  • public?class?Test?{?????? ??
  • static?int?multiply(int?n){?????? ??
  • if(n==1||n==0)?????? ??
  • return?n;?????? ??
  • else?????? ??
  • return?n*multiply(n-1);?????? ??
  • }?????? ??
  • ??? ??
  • public?static?void?main(String[]?args){?????? ??
  • System.out.println(multiply(10));?????? ??
  • }?????? ??
  • }??????
  • public class Test { static int multiply(int n){ if(n==1||n==0) return n; else return n*multiply(n-1); } public static void main(String[] args){ System.out.println(multiply(10)); } }
    ??
    ??
    上面的multiply是一個階乘的樣例。事實上遞歸遞歸,從字面上解釋就是在方法本身調(diào)用自己的方法,或者間接調(diào)用;看上面的程序,拿multiply(5)來說:???
    n=5;運行 5*multiply(4);???
    --------------------???
    這時候看multiply(4)???
    n=4 運行 4*multiply(3);???
    -------------------???
    看multiply(3)???
    n=3,運行 3*multiply(2);???
    ---------------???
    mulitply(2);???
    n=2 運行 2*mulitply(1);???
    這時候,return 1;往上返回???
    2*1向上返回???
    3*(2*1)向上返回???
    4*(3*(2*1)) 向上返回???
    5*(4*(3*(2*1)) ) = 120???
    所以程序輸出120;???
    這事簡單的遞歸的樣例;所以能夠看出來遞歸的關(guān)鍵得有遞歸出口(本體的If語句),還有遞歸方法;???


    下面是我在百度知道碰到一個朋友的提問,也是關(guān)于遞歸算法的:

    ------------------------問題------------------------------

    本人剛學(xué)JAVA,沒有不論什么編程基礎(chǔ),各位高手見笑。
    Java代碼
  • public?class?Count ??
  • { ??
  • ????static?void?count(int?n)???????????????//遞歸方法 ??
  • ????{ ??
  • ????????if?(n<5)? ??
  • ????????????count(n+1);? ??
  • ????????System.out.print("?????"+n); ??
  • ????}? ??
  • ????public?static?void?main(String?args[]) ??
  • ????{ ??
  • ????????count(1); ??
  • ????????System.out.println(); ??
  • ????} ??
  • }??
  • public class Count {static void count(int n) //遞歸方法{if (n<5) count(n+1); System.out.print(" "+n);} public static void main(String args[]){count(1);System.out.println();} } 請具體解說這段程序是怎么運行的,我的理解是先運行main函數(shù)里的count(1),然后進入count方法,N值為1,所以運行IF語句,直到count(5),此時退出if 循環(huán),打印N=5 ,然后應(yīng)該沒有要運行的東西了,但是答案是5???? 4???? 3???? 2???? 1 ,請問這是怎么回事,謝謝!


    --------------------回答---------------------------

    先運行count(1),然后進入count方法,N值為1,所以運行IF語句,也就是運行count(2),然后進入count方法,N值為2,所以運行IF語句,也就是運行count(3),然后進入count方法,N值為3,所以運行IF語句,也就是運行count(4),然后進入count方法,N值為4,所以運行IF語句,也就是運行count(5),然后進入count方法,N值為5,所以不運行IF語句,然后運行System.out.print(" "+n); 也就是輸出5,然后本次參數(shù)為5的count方法調(diào)用結(jié)束了,返回到調(diào)用它的參數(shù)為4的count方法中,然后運行System.out.print(" "+n);輸出4,然后一直這樣下去,輸出3,2,1 。這里須要說明的是在運行count(5)的時候,count(4)、count(3)、count(2)、count(1)都沒有運行完成,他們都在等自己方法體中的count(n+1)運行完成,然后再運行System.out.print(" "+n);

    轉(zhuǎn)載于:https://www.cnblogs.com/zfyouxi/p/3872678.html

    總結(jié)

    以上是生活随笔為你收集整理的Java的递归算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。