LISP: проблема переполнения листв из проблемы Ханойской башни - PullRequest
0 голосов
/ 08 октября 2019
;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, и он дал мне это ...

Ошибка (и), предупреждение (s): - Переполнение стека Lisp. RESET

Я думал, что это был простой код, но я не могу найти, какая часть переполняется.

1 Ответ

2 голосов
/ 08 октября 2019

В вашей функции нет условия завершения.

Попробуйте выполнить вручную:

  • (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.
...