LISP:来自汉诺塔问题的 lisp 溢出问题

标签 lisp common-lisp

;gnu clisp 2.49

(defun hanoi(n from_tower to_tower aux_tower)
    (hanoi (- n 1) from_tower aux_tower to_tower)
    (hanoi (- n 1) aux_tower to_tower from_tower)
)

(print "n=3")
(hanoi 3 1 3 2)

我正在尝试用 5 个磁盘制作一个 Hanoi 塔并在在线 LISP 编译器上编译它,它给了我这个...

错误,警告:- Lisp 堆栈溢出。重置

我以为这只是一段简单的代码,但我找不到溢出的部分。

最佳答案

您的函数中没有终止条件。

尝试手动执行:

  • (河内 3 'a 'b 'c)
    • 调用 (hanoi 2 'a 'b 'c) 其中
      • 调用 (hanoi 1 'a 'c 'b) 其中
        • 调用 (hanoi 0 'a 'b 'c) 其中
          • 调用 (hanoi -1 'a 'c 'b) 其中
            • 调用 (hanoi -2 'a 'b 'c) 其中
              • 调用 (hanoi -3 'a 'c 'b) 等等,直到可怜的 Lisp 解释器的堆栈溢出。

关于LISP:来自汉诺塔问题的 lisp 溢出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58283336/

相关文章:

java - 使用 Java 堆栈评估有效的 Lisp 表达式

lisp - 使用相对路径加载文件

binary - 在数据库中存储 Lisp 编译函数

lisp - (dolist (element list) ...) 中的 'element' 是什么意思?

lisp - 测试列表的所有元素是否彼此不同

list - 两个矩阵的乘法

lisp - Clojure 变量和循环

excel - 需要帮助调试 LISP 脚本错误/八位字节序列 141

lisp - delete-if 中谓词的多个参数

lisp - scbl 异常堆在垃圾收集期间耗尽