Вычисление числа Фибоначчи линейной рекурсией с одним рекурсивным вызовом - Lisp

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста. написать на лиспе функцию fibo2, вычисляющие числа Фибоначчи линейной рекурсии с одним рекурсивным вызовом.

Решение задачи: «Вычисление числа Фибоначчи линейной рекурсией с одним рекурсивным вызовом»

textual
Листинг программы
(defun fib (n &optional (c 1) (p 0))
  (if (= n 1) c (fib (- n 1) (+ c p) c)))
 
==> FIB
 
(fib 1)
 
==> 1
 
(fib 2)
 
==> 1
 
(fib 3)
 
==> 2
 
(fib 4)
 
==> 3
 
(fib 5)
 
==> 5
 
(fib 100)
 
==> 354224848179261915075

Объяснение кода листинга программы

В данном коде на языке Lisp определён процедурный параметр Fib, который вычисляет число Фибоначчи для заданного параметра n. Также определены два опциональных параметра: начальное значение C и промежуточное значение P. Начальное значение C по умолчанию равно 1, а промежуточное значение P по умолчанию равно 0. В данном коде реализован алгоритм вычисления чисел Фибоначчи линейной рекурсией с одним рекурсивным вызовом. Вот список описывающий работу кода:

  1. Задано значение n = 1.
  2. Так как условие (= n 1) истинно, то возвращается значение C = 1.
  3. Задано значение n = 2.
  4. Так как условие (= n 1) истинно, то возвращается значение C = 1.
  5. Задано значение n = 3.
  6. Так как условие (= n 1) ложно, то происходит рекурсивный вызов с параметрами (- n 1) и (+ c p) равными 2 и 1 соответственно.
  7. Для рекурсивного вызова с параметрами (- n 1) и (+ c p) равными 2 и 1 соответственно, возвращается значение 2.
  8. Для рекурсивного вызова с параметрами (- n 1) и (+ c p) равными 2 и 1 соответственно, возвращается значение 3.
  9. Задано значение n = 4.
  10. Так как условие (= n 1) ложно, то происходит рекурсивный вызов с параметрами (- n 1) и (+ c p) равными 2 и 2 соответственно.
  11. Для рекурсивного вызова с параметрами (- n 1) и (+ c p) равными 2 и 2 соответственно, возвращается значение 3.
  12. Для рекурсивного вызова с параметрами (- n 1) и (+ c p) равными 2 и 3 соответственно, возвращается значение 5.
  13. Задано значение n = 5.
  14. Так как условие (= n 1) ложно, то происходит рекурсивный вызов с параметрами (- n 1) и (+ c p) равными 2 и 3 соответственно.
  15. Для рекурсивного вызова с параметрами (- n 1) и (+ c p) равными 2 и 3 соответственно, возвращается значение 5.
  16. Для рекурсивного вызова с параметрами (- n 1) и (+ c p) равными 2 и 5 соответственно, возвращается значение 7.
  17. Для рекурсивного вызова с параметрами (- n 1) и (+ c p) равными 2 и 5 соответственно, возвращается значение 12.
  18. Задано значение n = 100.
  19. Так как условие (= n 1) ложно, то происходит рекурсивный вызов с параметрами (- n 1) и (+ c p) равными 2 и 100 соответственно.
  20. Для рекурсивного вызова с параметрами (- n 1) и (+ c p) равными 2 и 100 соответственно, возвращается значение 354224848179261915075.

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


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

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

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