;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堆栈溢出重置
我以为这只是一个简单的代码,但我找不到哪个部分被溢出了。

最佳答案

您的函数中没有终止条件。
尝试手动执行:
(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解释器堆栈溢出。

10-04 10:49