亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Java中使用遞歸反轉字符串

在Java中使用遞歸反轉字符串

DIEA 2019-11-26 15:13:34
這是一些Java代碼,以遞歸方式反轉字符串。有人可以解釋一下它是如何工作的嗎?public static String reverse(String str) {    if ((null == str) || (str.length() <= 1)) {        return str;    }    return reverse(str.substring(1)) + str.charAt(0);}我不明白這可能如何工作。
查看完整描述

3 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

該函數采用String的第一個字符str.charAt(0)-將其放在末尾,然后調用自身reverse()-在其余部分上調用- str.substring(1)將這兩件事加在一起即可得到結果-reverse(str.substring(1)) + str.charAt(0)


當傳入的String為一個字符或更少個字符時,將沒有剩余-當str.length()  <= 1)-它停止遞歸調用自身并僅返回傳入的String。


因此運行如下:


reverse("Hello")

(reverse("ello")) + "H"

((reverse("llo")) + "e") + "H"

(((reverse("lo")) + "l") + "e") + "H"

((((reverse("o")) + "l") + "l") + "e") + "H"

(((("o") + "l") + "l") + "e") + "H"

"olleH"


查看完整回答
反對 回復 2019-11-26
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

您需要記住,您不會只有一個電話-您將有嵌套電話。因此,當“嵌套程度最高的”調用立即返回時(當發現“ o”時),將進行下一個升級str.charAt(0)-此處str的“ lo”在哪里。這樣就返回“ ol”。


然后,下一個水平將收到“OL”,執行str.charAt(0)用于其的值str(這是“LLO”),返回“OLL”下一級進行。


那么下一個水平將收到來自它的遞歸調用的“OLL”,執行str.charAt(0)了它的價值str(這是“ELLO”),返回“歐萊”到一個新的水平了。


然后最后一級將收到來自它的遞歸調用的“OLL”,執行str.charAt(0)了它的價值str(這是“你好”),返回“2009東海生日賀”到原來的調用者。


邊走邊考慮堆棧可能很有意義:


// Most deeply nested call first...

reverse("o") -> returns "o"

reverse("lo") -> adds 'l', returns "ol" 

reverse("llo") -> adds 'l', returns "oll" 

reverse("ello") -> adds 'e', returns "olle" 

reverse("hello") -> adds 'h', returns "olleh" 


查看完整回答
反對 回復 2019-11-26
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

因為這是遞歸的,所以每一步的輸出都是這樣的:


輸入“ Hello”。然后該方法用“ ello”調用自身,并將返回結果+“ H”

輸入“ ello”。該方法使用“ llo”調用自身,并將返回結果+“ e”

輸入“ llo”。該方法使用“ lo”調用自身,并將返回結果+“ l”

輸入“ lo”。該方法使用“ o”調用自身,并將返回結果+“ l”

輸入“ o”。該方法將滿足if條件并返回“ o”

現在來看結果:


總的返回值將為您提供遞歸調用的結果加上第一個字符


從5返回的值將為:“ o”


從4的返回將是:“ o” +“ l”


3的返回值將是:“ ol” +“ l”


2的返回值是:“ oll” +“ e”


從1的返回將是:“ olle” +“ H”


這將為您提供“ olleH”的結果


查看完整回答
反對 回復 2019-11-26
  • 3 回答
  • 0 關注
  • 861 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號