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解释器堆栈溢出

我正在尝试制作一个有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)
              哪个
              • 调用
                (hanoi-3'a'c'b)
                等等,直到糟糕的Lisp解释器堆栈溢出

是什么阻止
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)