МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
КИЇВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ імені Тараса Шевченка
ФАКУЛЬТЕТ ІНФОРМАЦІЙНИХ ТЕХНОЛОГІЙ
Кафедра програмних систем і технологій



Дисципліна:
«Функціональне програмування»


Лабораторна робота № 1
на тему:
«Використання рекурсії для організації повторювальних процесів»


Виконав:
студент групи ІПЗ-44мс
Косенко Клим Сергійович

Перевірила:
Ніколаєнко Анастасія Юріївна


Київ 2023












Мета роботи

Сформувати декларативне мислення в галузі програмування завдяки використанню чистих функцій, рекурсій замість циклів, запобіганню даних, що змінюються.
Опанувати застосування рекурсивних функцій для обчислювальних процесів.




Умова завдання
Умова завдання


Код 1
        ";4.1
        (display "Enter X: ")
        (define x (read))
        
        (display "Enter n: ")
        (define n (read))
        
        (define (pow x n)
          (define (recpow x1 n)
            (if (= n 1)
               x1
               (recpow (* x x1) (- n 1))))
          (if(< n 0)
             (display "Не вірний параметр")
             (recpow x n))
          )
        
        (if (= n 1)
            (display x)
            (if (= (remainder n 2) 0)
                 (display (pow x (* 2 (/ n 2))))
                 (display (pow x (* 2 (/ (- n 1) 2))))
             )
        )"
      

Код 2
        ";4.2
        (display "\nEnter n: ")
        (define n (read))
        
        (define (sumDigit n)
          (if (= n 0)
              0
              (+ (remainder n 10) (sumDigit (quotient n 10))))
        )
        (display (sumDigit n))"
      



Скріншот роботи та результату
Результат виконання



Висновок

У даній лабораторній роботі ми зосередили увагу на формуванні декларативного мислення в програмуванні, де акцент зроблений на тому, що слід використовувати чисті функції. Ці функції не мають побічних ефектів та повертають значення, що залежить лише від їх вхідних параметрів.
Також, ми дослідили рекурсію як заміну циклів, що дозволяє розв'язувати складні задачі шляхом визначення функцій, які викликають себе. Це допомагає уникнути складності циклів та зробити код більш зрозумілим та підтримуваним.
Ще однією важливою концепцією, яку ми опрацювали, було запобігання даним, що змінюються, що означає уникання змінних та зміни стану в процесі виконання програми. Це дозволяє покращити читабельність та передбачуваність програм, роблячи їх більш надійними та легше супроводжуваними.