Привет, ребята, я пытаюсь создать функцию, которая принимает один параметр: n, а затем возвращает значение количества ходов, необходимых для передачи n дисков с привязки 1 на привязку 3 в проблеме Ханойской башни. Подсказки: общее количество ходов для n дисков, H (n) = 2H (n-1) +1, если n> 1 = 1, если n = 1. Я реализовал код на Python, и он отлично работает, но когда я реализовать это в схеме, я пришел к неправильному ответу. Я новичок в схеме и буду благодарен, если вы, ребята, поможете мне разобраться, где я напортачил. Код, который я придумал, приведен ниже:

(define(hanoi n)
      (if(< n 2)
          1
      (+(* 2 (hanoi(- n 1) 1)))))
(display(hanoi 4))
0
Tareq Mahmud 10 Ноя 2020 в 11:26

1 ответ

Лучший ответ

Вы передаете два параметра в hanoi, но он ожидает только один, круглые скобки неуместны. Так выглядит формула отношения повторения в схеме - и, пожалуйста, обратите внимание на то, как вы должны делать отступы и форматировать свой код! даже лучше, пусть ваш редактор сделает это правильно за вас:

(define (hanoi n)
  (if (< n 2)
      1
      (+ (* 2 (hanoi (- n 1))) 1)))


(hanoi 4)
=> 15

Кстати: для этой проблемы есть закрытое решение, вам не нужно писать рекурсивную процедуру для определения количества ходов - просто примените формулу 2**n - 1:

(define (hanoi n)
  (- (expt 2 n) 1))

(hanoi 4)
=> 15
0
Óscar López 10 Ноя 2020 в 11:49