Вычисление произведений рекурсией - Lisp

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

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

Здравствуйте, пожалуйста помогите разобраться. Имеется произведение
(defun y(N)
  (labels
    ( (ij-func (i j)
       (/ j (* i i))) 
      (y-iter (i j prod1 prod2) // не могу разобраться с этой функцией организующей вложенные циклы (строки 5-8)
       (cond ((> i N) prod2) // здесь prod 2 это произведение по i от 1 до N?
             ((> j N) (y-iter (+ i 1) 1 1 (* prod1 prod2)))
             (T (y-iter i (+ j 1) (* prod1 (ij-func i j)) prod2 ))))) // 
    (y-iter 1 1 1 1 )))
Здесь когда первый раз вызываем ij-func то будет j=1 или j=2 (т.к в скобках указано (+ j 1) ) ?
(T (y-iter i (+ j 1) (* prod1 (ij-func i j)) prod2 )))))

Решение задачи: «Вычисление произведений рекурсией»

textual
Листинг программы
(defun prod (n)
  (let ((p 1))
    (iter (for i from 1 to n)
       (iter (for j from 1 to n) (multiplying (/ j (* i i)) into p))) p))
 
==> PROD
 
(prod 5)
 
==> 1/24883200000
 
(prod 10)
 
==> 1/395940866122425193243875570782668457763038822400000000000000000000
 
(prod 2)
 
==> 1/4

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

В коде определён функционал для вычисления произведения чисел от 1 до n с помощью рекурсии.

  1. defun prod (n) — определяет функцию prod, которая принимает один аргумент n.
  2. let ((p 1)) — определяет переменную p и присваивает ей значение 1.
  3. iter (for i from 1 to n) — рекурсивный цикл, который будет проходить от 1 до n.
  4. iter (for j from 1 to n) — вложенный цикл, который будет проходить от 1 до n.
  5. (multiplying (/ j (* i i)) into p) — выполняет умножение текущего значения j на текущее значение i и присваивает результат переменной p.
  6. p) — возвращает значение переменной p как результат работы функции. Значение переменной p будет равно произведению всех чисел от 1 до n, включая само число n. Примеры использования функции:
  7. (prod 5) — вычисляет произведение чисел от 1 до 5, т.е. 12345=120.
  8. (prod 10) — вычисляет произведение чисел от 1 до 10, т.е. 123456789*10=395940866122425193243875570782668457763038822400000000000000000000.
  9. (prod 2) — вычисляет произведение чисел от 1 до 2, т.е. 1*2=2.

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


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

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

12   голосов , оценка 4.167 из 5