Написать функцию, вычисляющую сумму чисел Фибоначчи, не превосходящих заданного числа - 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.

  1. (defun sum-fib (n &optional (p 1) (c 1) (r 0)) — определение функции sum-fib с тремя опциональными параметрами
  2. (if (> c n) r (sum-fib n c (+ c p) (+ r c))) — рекурсивный вызов функции sum-fib с обновленными значениями c и r
  3. (sum-fib 1) — вызов функции sum-fib с аргументом 1
  4. 1 - результат вызова функции sum-fib с аргументом 1
  5. (sum-fib 2) — вызов функции sum-fib с аргументом 2
  6. 3 - результат вызова функции sum-fib с аргументом 2
  7. (sum-fib 3) — вызов функции sum-fib с аргументом 3
  8. 6 - результат вызова функции sum-fib с аргументом 3
  9. (sum-fib 10) — вызов функции sum-fib с аргументом 10
  10. 19 - результат вызова функции sum-fib с аргументом 10
  11. (sum-fib 10000) — вызов функции sum-fib с аргументом 10000
  12. 17709 - результат вызова функции sum-fib с аргументом 10000

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


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

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

11   голосов , оценка 3.727 из 5
Похожие ответы