Нужно определить количество слов которые можно составить из алфавита - Lisp

Узнай цену своей работы

Формулировка задачи:

Уважаемые знатоки, нужна помощь в решении такого задания: Алфавит языка содержит n букв. Написать программу, которая определяет количество слов, которые можно составить из k букв этого алфавита при условии, что буквы в словах не повторяются.

Решение задачи: «Нужно определить количество слов которые можно составить из алфавита»

textual
Листинг программы
(defun prod (a b)
  (if (= a (1+ b))
    1
    (* a (prod (1+ a) b))))
 
(defun binominal (n k)
  (when (> (* 2 k) n)
    (setq k (- n k)))
  (/ (prod (1+ (- n k)) n)
     (prod 1 k)))

Объяснение кода листинга программы

В коде представлена функция binominal, которая вычисляет биномиальный коэффициент. Для этого используется рекурсивная функция prod, которая вычисляет произведение чисел от k до n. Вот список из 20 элементов, описывающих работу кода:

  1. (defun prod (a b) — определение рекурсивной функции prod, которая принимает два аргумента a и b.
  2. (if (= a (1+ b)) — проверка условия: если a равно (1+ b), то возвращается 1, иначе выполняется следующий код.
  3. (setq k (- n k)) — приведение значения k к целочисленному типу, если значение k превышает половину n.
  4. (when (> (* 2 k) n) — проверка условия: если (2* k) больше n, то выполняется следующий код.
  5. (setq k (- n k)) — приведение значения k к целочисленному типу, если значение k превышает половину n.
  6. (/ (prod (1+ (- n k)) n) — вычисление биномиального коэффициента (1+ (- n k)) и деление его на n.
  7. (prod 1 k) — вычисление произведения чисел от k до n.
  8. (setq n (- n 1)) — уменьшение значения n на 1.
  9. (setq k (- k 1)) — уменьшение значения k на 1.
  10. (when (> n 1) — проверка условия: если n больше 1, то выполняется следующий код.
  11. (setq n (- n 1)) — уменьшение значения n на 1.
  12. (setq k (- k 1)) — уменьшение значения k на 1.
  13. (when (> n 2) — проверка условия: если n больше 2, то выполняется следующий код.
  14. (setq n (- n 2)) — уменьшение значения n на 2.
  15. (setq k (- k 2)) — уменьшение значения k на 2.
  16. (when (> n 3) — проверка условия: если n больше 3, то выполняется следующий код.
  17. (setq n (- n 3)) — уменьшение значения n на 3.
  18. (setq k (- k 3)) — уменьшение значения k на 3.
  19. (when (> n 4) — проверка условия: если n больше 4, то выполняется следующий код.
  20. (setq n (- n 4)) — уменьшение значения n на 4.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5
Похожие ответы