Цю статтю потрібно повністю переписати відповідно до стандартів якості Вікіпедії. |
В іншому мовному розділі є повніша стаття Recursion (computer science)(англ.). Ви можете допомогти, розширивши поточну статтю за допомогою перекладу з англійської.
|
Процедура рекурсивна — процедура в програмуванні, у тілі якої знаходиться явне звернення до неї самої, або через іншу процедуру.
Застосування рекурсивних процедур, у багатьох випадках допомагає скоротити алгоритми, зробити їхню форму компактнішою.
Використання рекурсивних процедур Редагувати
Рекурсивні процедури використовують, зокрема, для описання алгоритмів обчислення значень функцій, які задаються рекурентними співвідношеннями, наприклад:
- обчислення факторіалу n! = F(n): F(0) = 1; F(n) = n · F(n - 1)
- обчислення чисел Фібоначчі F(1) = F(2) = 1; F(n) = F(n - 1) + F(n - 2).
Однак, слід зазначити, що використання рекурсивних процедур пов'язане з багаторазовим входом під час виконання програми в один і той же блок без виходу із нього. Кількість рекурсивних входів називається рівнем рекурсії.
Приклад рекурсивної функції на мові програмування Python Редагувати
class Node: def __init__(self, key, value): self.key = key self.value = value example_of_object_to_deserialize = Node("root", [ Node("int", 1), Node("dict", Node( "nested_dict", [ Node( "str", "str" ), Node( "nested_nested_dict", Node( "int", 2 ) ) ] )), Node("list", [ Node( "list_nested", [ Node("list_nested_nested", Node("int", 1)) ] ), Node( "int", 4 ) ]) ]) def deserialize_object(object_to_deserialize): deserialized_object_dict = {} if isinstance(object_to_deserialize.value, Node): deserialized_object_dict[object_to_deserialize.key] = deserialize_object(object_to_deserialize.value) elif isinstance(object_to_deserialize.value, (set, list, tuple)): object_to_deserialize_values = [] for obj in object_to_deserialize.value: if isinstance(obj.value, Node) or isinstance(obj.value, (set, list, tuple)): object_to_deserialize_values.append(deserialize_object(obj)) else: object_to_deserialize_values.append({obj.key: obj.value}) deserialized_object_dict[object_to_deserialize.key] = object_to_deserialize_values else: deserialized_object_dict[object_to_deserialize.key] = object_to_deserialize.value return deserialized_object_dict print(deserialize_object(example_of_object_to_deserialize))
Див. також Редагувати
- Рекурсія
- Хвостова рекурсія
- Рекурсивні функції (математичне визначення)
- Операція примітивної рекурсії
- Процедура (програмування)
Джерела Редагувати
- Енциклопедія кібернетики, Халілов А. І., т. 2, с. 251-252.
Посилання Редагувати
- IBM developerWorks: Mastering recursive programming [ 7 листопада 2006 у Wayback Machine.] — (англ.) переваги та недоліки, правила програмування рекурсивних процедур.
Це незавершена стаття з інформатики. Ви можете допомогти проєкту, виправивши або дописавши її. |