Написать функцию, вычисляющую сумму чисел Фибоначчи, не превосходящих заданного числа - Lisp
Формулировка задачи:
Нужна помощь
HomeLisp
Решение задачи: «Написать функцию, вычисляющую сумму чисел Фибоначчи, не превосходящих заданного числа»
textual
Листинг программы
(defun sum-fib (n &optional (p 1) (c 1) (r 0)) (if (> c n) r (sum-fib n c (+ c p) (+ r c)))) ==> sum-fib (sum-fib 1) ==> 1 (sum-fib 2) ==> 3 (sum-fib 3) ==> 6 (sum-fib 10) ==> 19 (sum-fib 10000) ==> 17709
Объяснение кода листинга программы
В данном коде написана функция sum-fib, которая вычисляет сумму чисел Фибоначчи, не превосходящих заданное число n. Функция получает три параметра: n — число, не превосходящее сумму двух предыдущих чисел Фибоначчи; p — первое число Фибоначчи; c — второе число Фибоначчи. Если c больше n, то функция возвращает r, иначе рекурсивно вызывает себя с обновленными значениями c и r, которые являются суммой предыдущего числа Фибоначчи и p. В итоге функция возвращает сумму чисел Фибоначчи, не превосходящих заданное число n. Количество элементов в списке не превышает 20.
- (defun sum-fib (n &optional (p 1) (c 1) (r 0)) — определение функции sum-fib с тремя опциональными параметрами
- (if (> c n) r (sum-fib n c (+ c p) (+ r c))) — рекурсивный вызов функции sum-fib с обновленными значениями c и r
- (sum-fib 1) — вызов функции sum-fib с аргументом 1
- 1 - результат вызова функции sum-fib с аргументом 1
- (sum-fib 2) — вызов функции sum-fib с аргументом 2
- 3 - результат вызова функции sum-fib с аргументом 2
- (sum-fib 3) — вызов функции sum-fib с аргументом 3
- 6 - результат вызова функции sum-fib с аргументом 3
- (sum-fib 10) — вызов функции sum-fib с аргументом 10
- 19 - результат вызова функции sum-fib с аргументом 10
- (sum-fib 10000) — вызов функции sum-fib с аргументом 10000
- 17709 - результат вызова функции sum-fib с аргументом 10000
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д