Bạn cần nhớ rằng bạn sẽ không chỉ có một cuộc gọi - bạn sẽ có một cuộc gọi lồng nhau. Vì vậy, khi cuộc gọi "lồng tiếng cao nhất" trả về ngay lập tức (khi nó chỉ tìm thấy "o"), cấp độ tiếp theo sẽ mất str.charAt(0)
- trong đó str
là "lo" tại thời điểm đó. Vì vậy sẽ trả về "ol".
Sau đó Next Level sẽ nhận được "ol", thực hiện str.charAt(0)
cho giá trị của str
(đó là "llo"), trở về "oll" lên tầm cao mới ra.
Sau đó Next Level sẽ nhận được "oll" từ cuộc gọi đệ quy của mình, thực hiện str.charAt(0)
cho giá trị của str
(đó là "ello"), trở về "Olle" lên tầm cao mới ra.
Sau đó thức cấp sẽ nhận được "oll" từ cuộc gọi đệ quy của mình, thực hiện str.charAt(0)
cho giá trị của str
(đó là "hello"), trở về "olleh" cho người gọi ban đầu.
Nó có thể làm cho tinh thần để nghĩ về chồng như bạn đi:
// 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"
Nguồn
2012-03-15 16:33:44
Sử dụng đệ quy để đảo ngược chuỗi là dấu hiệu rõ ràng của một lập trình viên xấu. – DwB
Bài tập về nhà, @DwB - Tôi nghĩ đó là một cuộc biểu tình hợp lý về đệ quy. – adelphus
@DwB nó có thẻ bài tập về nhà, vì vậy họ có thể sử dụng nó để dạy đệ quy.Một trong những cách dễ nhất để hiểu cách đệ quy hoạt động lần đầu tiên – jzworkman