Вычислить значения функции рекурсивным способом - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д