Реализовать функцию рекурсивным способом - Lisp
Формулировка задачи:
Реализовать с помощью рекурсии!
Вычислить значения функции (y=10/1+x), где (0<=x<=20) с шагом 0,5. Все полученные значения хранить в списке.
Помогите,пожалуйста! Мне нужно просто объяснение!
ЗАРАНЕЕ БЛАГОДАРЮ!
Решение задачи: «Реализовать функцию рекурсивным способом»
textual
Листинг программы
;; Простая рекурсия (defun task (f x1 x2 h) (cond ((> x1 x2) nil) (t (cons (funcall f x1) (task f (+ x1 h) x2 h))))) ==> task (task (lambda (x) (/ 10 (+ x 1))) 0 20 0.5) ==> (10 6.66666666666667 5.0 4.0 3.33333333333333 2.85714285714286 2.5 2.22222222222222 2.0 1.81818181818182 1.66666666666667 1.53846153846154 1.42857142857143 1.33333333333333 1.25 1.17647058823529 1.11111111111111 1.05263157894737 1.0 0.952380952380952 0.909090909090909 0.869565217391304 0.833333333333333 0.8 0.769230769230769 0.740740740740741 0.714285714285714 0.689655172413793 0.666666666666667 0.645161290322581 0.625 0.606060606060606 0.588235294117647 0.571428571428571 0.555555555555556 0.540540540540541 0.526315789473684 0.512820512820513 0.5 0.48780487804878 0.476190476190476)
Объяснение кода листинга программы
В данном коде реализована простая рекурсивная функция, которая вычисляет последовательность чисел, используя заданный шаг и начальное значение.
- В первой строке определена функция с именем
task, которая принимает четыре аргумента: f, x1, x2 и h. - В следующей строке определено условие с помощью конструкции
cond. Если x1 больше x2, то возвращается значение nil. В противном случае, выполняется рекурсивный вызов функцииtaskс новыми значениями x1, x2 и h, которые вычисляются с помощью операций сложения и вычитания. - Значение функции
taskсохраняется в переменнойresult. - Затем вызывается функция
taskс аргументами (lambda (x) (/ 10 (+ x 1))) , 0, 20, 0.5), которая является тестовым примером использования функции. - Результат выводится на экран с помощью функции
print.