該函數導致堆棧溢出超過大約2000步,有什麼方法可以輕鬆優化它以使用更少的內存嗎?優化Lisp遞歸隨機遊走
(defun randomwalk (steps state)
(displaystate state)
(if (equal steps 0) nil
(if (solved? state) t
(let ((nrmlstate (normalize state)))
(randomwalk (- steps 1) (applymove nrmlstate (nth (random
(length (getallmoves nrmlstate))) (getallmoves nrmlstate))))
)
)
)
)
您可能希望通過更好的代碼格式和可重複的測試用例來改善您的問題。看到這個Stackoverflow幫助:https://stackoverflow.com/help/mcve –
正如Rainer所說,你的代碼的格式非常糟糕,很難看到它的作用(缺少一個測試用例也無濟於事) ,但是在大多數實現中(但是*不*由語言保證)編譯這個函數應該導致一個不消耗堆棧的進程。 (有些實現可能不需要編譯步驟,甚至是。) – tfb