Зараз в ефірі:
Вебінар:
«
Нейротренажери для мозку - цікавинки на літо для дітей
»
Взяти участь Всі події
Урок:

Рекурсивні функції

09.11.2023
1 0
Вміст уроку:
1
2
3
4

Урок не містить жодного завдання. Додайте завдання.

Щоб додати завдання, оберіть категорію завдання на панелі запитань.

1

1 з 12 балів

Рекурсія (від латин. recursio — повернення) у широкому розумінні — це опис або зображення об’єкта (процесу, явища) через самого себе. Рекурсія застосовується в різних галузях людської діяльності, найчастіше — в математиці й інформатиці. У лінгвістиці рекурсією називають можливість мови породжувати нові мовні конструкції на основі попередньої.

Приклад 1.

Речення «Тип об’єктів визначає синтаксичний смисл оператора» може бути розширено до такого: «Сашко зрозумів, що тип об’єктів визначає синтаксичний смисл оператора», а останнє речення розширено до такого: «Тепер Катря знає, що Сашко зрозумів, що тип об’єктів визначає синтаксичний смисл оператора».

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

Програми обчислення рекурсій оформлюються у вигляді підпрограм (у мові Python —функцій). Реалізація таких функцій заснована на структурі даних, що називають стеком.

У стеку спочатку запам’ятовуються всі дії, що виконуються до моменту обчислення опорного значення, а потім у зворотному порядку вони виконуються.

Наприклад, якщо рекурсивна функція обчислює числа Фібоначчі, то запам’ятовуються всі дії f(n) = f(n–2) + f(n–1) до тих пір, поки не буде знайдене опорне значення, а потім у зворотному порядку виконується обчислення.

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

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

Уже відомий вам алгоритм рекурентного обчислення виразу y = xn можна подати так:

0500v671-9b39-461x373.png

У наведенному алгоритмі після того, як вираз i<=n на кроці 6 набуде значення False, виконання алгоритму завершується і змінна y міститиме результат обчислення.

Для рекурсивного обчислення значення xn (n — додатне ціле, x — може бути дійсне) необхідно обчислити значення xn-1, оскільки xn = xn-1 * x. У свою чергу, для обчислення xn-1 потрібно обчислити xn-2, оскільки xn-1=xn-2 * x і т. д. Процес обчислення припиняється після обчислення x0, оскільки воно має значення 1.

Усі ці дії запам’ятовуються в стеку. Але отримано не результат, а лише опорне значення функції. Для отримання кінцевого значення функції потрібно реалізувати зворотний процес обчислення, що міститься в стеку.

def st(x,n):
 if n == 0:
 return 1
 else:
 return st(x, n - 1)*x

print("Введіть число x")
x = int(input())
print("Введіть число n")
n = int(input())
print("результат=", st(x,n))

0500v6y5-8d0f-662x147.png

Класичним варіантом рекурсивної функції є обчислення факторіалу заданого числа n, яке виконується за формулою n! = n * (n–1)!, якщо n>0, і n! = 1, якщо n=0.

def fact(n):
 if n == 0:
 return 1
 else:
 return n * fact(n - 1)
print("Введіть число")
n = int(input())
print(fact(n))

Приклад 4.

Дано два цілі додатні числа. Розробити програму обчислення найбільшого спільного дільника з використанням рекурсивної функції.

Програма знаходження найбільшого спільного дільника двох цілих чисел без викори станнярекурсивних підпрограм уже розглядалася раніше. Розв’язання задачі засноване на використанні алгоритму Евкліда. Програму реалізації цього алгоритму з використанням рекурсивної функції зображено нижче. Функція має ім’я nod, а числа, для яких обчислюється найбільший спільний дільник, позначені змінними a і b.

def nod(a, b):
 if b == 0:
 return a
 else:
 return nod(b, a % b)
 
print("Введіть число a")
a = int(input())
print("Введіть число b")
b = int(input())
print("nod = ", nod(a, b))

Рекурсія є складним процесом, який вимагає додаткової пам’яті та часу її реалізації. Тому частіше викори стовується рекурентне обчислення. Однак без рекурсії інколи обійтися досить складно, оскільки без неї алгоритм має заплутану логіку.

2

4 з 12 балів
Тест до уроку "Рекурсивні функції Python"
9 листопада 2023
0 0
Аватар профіля Губчик Вероніка Григорівна
Аватар профіля Губчик Вероніка Григорівна
Інформатика
10 клас
5 4 36 6 75 0

3

4 з 12 балів

Ввести код програми за зразком (з коментарями). Записати результат виконання програми

Приклад 1:

0500v7v7-1078-634x410.png

Приклад 2:

0500v7x3-52d3-526x282.png

Приклад 3:

0500v7xw-f538-568x352.png

4

3 з 12 балів

Задача:

Створіть рекурсивну функцію для обчислення суми перших n натуральних чисел.

Умова:

Напишіть програму на мові програмування Python, яка містить рекурсивну функцію для обчислення суми перших n натуральних чисел. Користувач повинен вводити значення n, і програма має виводити суму цих чисел.

Приклад виклику:

Введіть значення n: 5
Сума перших 5 натуральних чисел: 15

Пояснення:

Сума перших n натуральних чисел може бути обчислена рекурсивно за формулою: 1 + 2 + 3 + ... + n.

Рефлексія від 11 учнів

Сподобався:

0

Так: 8

Ні: 3

Зрозумілий:

0

Так: 6

Ні: 5

Потрібні роз'яснення:

0

Ні: 8

Так: 3

Рекомендуємо

Практична робота: Розробка рекурсивних алгоритмів та їх реалізація у вигляді програм

Практична робота: Розробка рекурсивних алгоритмів та їх реалізація у вигляді програм

139

Аватар профіля Губчик Вероніка Григорівна
Інформатика
9 клас

30 грн

Функції користувача. Приклади задач

Функції користувача. Приклади задач

350

Аватар профіля Губчик Вероніка Григорівна
Інформатика
9 клас

50 грн

Робота з великими числами в Python

Робота з великими числами в Python

269

Аватар профіля Губчик Вероніка Григорівна
Інформатика
10—11 клас

33 грн

3.2. Вкладені оператори умовного переходу

3.2. Вкладені оператори умовного переходу

70

Аватар профіля Губчик Вероніка Григорівна
Інформатика
10 клас

30 грн

Поняття комп’ютерної графіки. Растрові зображення, їх властивості. Формати файлів растрових зображень

Поняття комп’ютерної графіки. Растрові зображення, їх властивості. Формати файлів растрових зображень

214

Аватар профіля Губчик Вероніка Григорівна
Інформатика
8 клас

33 грн

Стандартні підпрограми для опрацювання символьних та рядкових величин

Стандартні підпрограми для опрацювання символьних та рядкових величин

143

Аватар профіля Губчик Вероніка Григорівна
Інформатика
9 клас

50 грн

Схожі уроки

Впорядкування, пошук і фільтрування даних.

Впорядкування, пошук і фільтрування даних.

1277

Аватар профіля Вожга Ірина Леонідівна
Інформатика
9 клас

Створення й уведення структури таблиць. Поняття таблиці, поля, запису. Створення таблиць, означення полів і ключів у середовищі СКБД. Властивості полів, типи даних.

Створення й уведення структури таблиць. Поняття таблиці, поля, запису. Створення таблиць, означення полів і ключів у середовищі СКБД. Властивості полів, типи даних.

1095

Аватар профіля Савка-Ржематорська Оксана Василівна
Інформатика
9 клас

Цикли з передумовою у вкладених циклах

Цикли з передумовою у вкладених циклах

1337

Аватар профіля Вожга Ірина Леонідівна
Інформатика
6 клас

Налаштування часових параметрів аудіо- та відеоряду.

Налаштування часових параметрів аудіо- та відеоряду.

490

Аватар профіля Солодовнікова Катерина Олексіївна
Інформатика
8 клас

Елемент керування «кнопка». Поняття об’єкту та його властивостей і методів (на прикладі елементів екранної форми). Властивості і методи елементів керування.

Елемент керування «кнопка». Поняття об’єкту та його властивостей і методів (на прикладі елементів екранної форми). Властивості і методи елементів керування.

645

Аватар профіля Пилипенко Олена Володимирівна
Інформатика
8 клас

Елемент керування кнопка

Елемент керування кнопка

272

Аватар профіля Пилипенко Олена Володимирівна
Інформатика
8 клас