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"

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"

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”的結果
添加回答
舉報