【发布时间】:2017-10-20 20:01:16
【问题描述】:
这个函数导致堆栈溢出大约 2000 多步,有什么方法可以轻松优化它以使用更少的内存?
(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 帮助:stackoverflow.com/help/mcve
-
正如 Rainer 所说,代码的格式非常糟糕,以至于很难看出它做了什么(而且缺少测试用例也无济于事),但在大多数实现中(但 not 由语言保证)编译这个函数应该会导致一个不消耗堆栈的进程。 (有些实现甚至可能不需要编译步骤。)
标签: recursion optimization lisp clisp