Вычислить значения функции рекурсивным способом - Lisp
Формулировка задачи:
Вычислить значения функции (y=10/1+x), где (0<=x<=20) с шагом 0,5. Все полученные значения хранить в списке.
Использовать рекурсию.
Не могу понять,где ошибка.
Листинг программы
- (setq rez '())
- (setq x 0)
- (defun fun ( x i)
- (when (not (zerop i))
- (setq y (/ 10 (+ 1 x)))
- (fun (+ x 0.5) (- i 1))
- (setq y (list y))
- (setq rez (append rez y))
- (print x)
- (print y)
- )
- )
Решение задачи: «Вычислить значения функции рекурсивным способом»
textual
Листинг программы
- (setq rez '()) ;; две глобальные переменные. Зачем?
- (setq x 0)
- (defun fun (x i)
- (when (not (zerop i)) ;; если i не нуль...
- (setq y (/ 10 (+ 1 x))) ;; вычисляем очередное значение y (опять глобальная переменная!)
- (fun (+ x 0.5) (- i 1)) ;; рекурсивный вызов с i на 1 меньшим и x на 0.5 большим
- (setq y (list y)) ;; превращаем y в (y)
- (setq rez (append rez y)) ;; присобачиваем y в хвост глобальной переменной rez
- (print x) ;; печатаем x и y Зачем?
- (print y)
- ) ;; когда i станет нулем, в rez должен остаться список...
- )
Объяснение кода листинга программы
В данном коде происходит вычисление функции рекурсивным способом.
- Создаются две глобальные переменные: rez и x. Переменная rez инициализируется пустым списком, а x - нулем.
- Определяется функция fun, которая принимает два аргумента: x и i. Внутри функции проверяется условие: если i не равно нулю, то выполняется следующий блок кода.
- Вычисляется значение y как результат деления 10 на сумму 1 и x. Затем, x увеличивается на 0.5 и функция fun вызывается рекурсивно с новыми значениями аргументов: (+x 0.5) и (-i 1).
- Значение y приводится к списку, затем оно добавляется в хвост списка rez.
- Выводится значение x и y.
- Когда i становится равным нулю, рекурсия завершается и в переменной rez остается список. Вывод: данный код вычисляет функцию, используя рекурсию, и выводит значения x и y.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д