Нужно определить количество слов которые можно составить из алфавита - 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 элементов, описывающих работу кода:
(defun prod (a b)
— определение рекурсивной функцииprod
, которая принимает два аргументаa
иb
.(if (= a (1+ b))
— проверка условия: еслиa
равно(1+ b)
, то возвращается 1, иначе выполняется следующий код.(setq k (- n k))
— приведение значенияk
к целочисленному типу, если значениеk
превышает половинуn
.(when (> (* 2 k) n)
— проверка условия: если(2* k)
большеn
, то выполняется следующий код.(setq k (- n k))
— приведение значенияk
к целочисленному типу, если значениеk
превышает половинуn
.(/ (prod (1+ (- n k)) n)
— вычисление биномиального коэффициента(1+ (- n k))
и деление его наn
.(prod 1 k)
— вычисление произведения чисел отk
доn
.(setq n (- n 1))
— уменьшение значенияn
на 1.(setq k (- k 1))
— уменьшение значенияk
на 1.(when (> n 1)
— проверка условия: еслиn
больше 1, то выполняется следующий код.(setq n (- n 1))
— уменьшение значенияn
на 1.(setq k (- k 1))
— уменьшение значенияk
на 1.(when (> n 2)
— проверка условия: еслиn
больше 2, то выполняется следующий код.(setq n (- n 2))
— уменьшение значенияn
на 2.(setq k (- k 2))
— уменьшение значенияk
на 2.(when (> n 3)
— проверка условия: еслиn
больше 3, то выполняется следующий код.(setq n (- n 3))
— уменьшение значенияn
на 3.(setq k (- k 3))
— уменьшение значенияk
на 3.(when (> n 4)
— проверка условия: еслиn
больше 4, то выполняется следующий код.(setq n (- n 4))
— уменьшение значенияn
на 4.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д