;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/