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

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

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

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

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

textual
Листинг программы
  1. (defun fib (n &optional (c 1) (p 0))
  2.   (if (= n 1) c (fib (- n 1) (+ c p) c)))
  3.  
  4. ==> FIB
  5.  
  6. (fib 1)
  7.  
  8. ==> 1
  9.  
  10. (fib 2)
  11.  
  12. ==> 1
  13.  
  14. (fib 3)
  15.  
  16. ==> 2
  17.  
  18. (fib 4)
  19.  
  20. ==> 3
  21.  
  22. (fib 5)
  23.  
  24. ==> 5
  25.  
  26. (fib 100)
  27.  
  28. ==> 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы