LISP:河内塔问题引起的Lisp溢出问题

时间:2019-10-08 09:11:34

标签: 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个磁盘制作一个河内塔,并使用在线LISP编译器对其进行编译,这给了我...

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

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

1 个答案:

答案 0 :(得分:2)

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

尝试手动执行:

  • (hanoi 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解释器堆栈溢出为止。