LISP:河内塔问题导致的LISP溢出问题
我正在尝试制作一个有5个磁盘的河内塔,并在一个在线LISP编译器上编译它,它给了我这个 错误、警告:-Lisp堆栈溢出。重置LISP:河内塔问题导致的LISP溢出问题,lisp,common-lisp,Lisp,Common Lisp,我正在尝试制作一个有5个磁盘的河内塔,并在一个在线LISP编译器上编译它,它给了我这个 错误、警告:-Lisp堆栈溢出。重置 我以为这只是一个简单的代码,但我找不到哪个部分溢出了。函数中没有终止条件 尝试手动执行: (河内3'a'b'c) 调用(河内2'a'b'c),其中 调用(河内1'a'c'b)哪个 调用(河内0'a'b'c)哪个 调用(河内-1'a'c'b)哪个 调用(河内-2'a'b'c)哪个 调用(hanoi-3'a'c'b)等等,直到糟糕的Lisp解释器堆栈溢出
我以为这只是一个简单的代码,但我找不到哪个部分溢出了。函数中没有终止条件 尝试手动执行:
(河内3'a'b'c)
- 调用
,其中(河内2'a'b'c)
- 调用
哪个(河内1'a'c'b)
- 调用
哪个(河内0'a'b'c)
- 调用
哪个(河内-1'a'c'b)
- 调用
哪个(河内-2'a'b'c)
- 调用
等等,直到糟糕的Lisp解释器堆栈溢出(hanoi-3'a'c'b)
- 调用
- 调用
- 调用
- 调用
- 调用
- 调用
(河内3'a'b'c)
- 调用
,其中(河内2'a'b'c)
- 调用
哪个(河内1'a'c'b)
- 调用
哪个(河内0'a'b'c)
- 调用
哪个(河内-1'a'c'b)
- 调用
哪个(河内-2'a'b'c)
- 调用
等等,直到糟糕的Lisp解释器堆栈溢出(hanoi-3'a'c'b)
- 调用
- 调用
- 调用
- 调用
- 调用
- 调用
n
在代码中变为负数?是什么阻止n
在代码中变为负数?
;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)