![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
|
Рекурсия - это такая организация работы, при которой функция вызывает сама себя.
| Задание | Краткие теоретические сведения | ||
| 1. Изучить использование простых рекурсивных функций на примере программы, представленной в правой части. Определить признак конца ввода чисел, проанализировав текст программы. Добавить операторы, позволяющие определить, сколько раз функция binPrn вызывает сама себя. |
Пример программы перевода десятичного числа в двоичный вид с использованием рекурсии.
| ||
| 2. Выполнить програм-му, разработанную с использованием рекурсии. Реализовать алгоритм без использования рекурсии. |
Пример. Определить, является ли заданная строка палиндромом, т.е. читается одинаково слева направо и справа налево.
Идея решения заключается в просмотре строки одновременно слева направо и справа налево и сравнении соответствующих символов. Если в какой-то момент символы не совпадают, делается вывод о том, что строка не является палиндромом, если же удается достичь середины строки и при этом все соответствующие символы совпали, то строка является палиндромом.
Граничное условие - строка является палиндромом, если она пустая или состоит из одного символа.
| ||
| 3. Выполнить программу, приведенную в правой части. Записать ее условие. Добавить любое слово в массив w и проанализировать результат работы программы. Добавить операторы вывода сообщения о том, что некоторое слово в массиве w не подходит и его нужно изменить. |
|
4. В соответствии со своим вариантом выполнить задания из таблицы, представленной ниже.
5. К номеру своего варианта прибавить число 2 и написать программу для новых исходных данных (для вариантов с 15 по 16 перейти к вариантам с 1 по 2).
| № | Условие задачи | Пояснения к алгоритму |
| 1, 2 | Разработать программу, реализующую рекурсивную функцию подсчета количества x(m) разбиений натурального числа m в виде суммы натуральных чисел. | Для m = 4 разбиения: 4, 3+1, 2+2, 2+1+1, 1+1+1+1. Таким образом, x(m) = 5. Функция подсчета P(m, n) количества разбиений натурального числа m со слагаемыми, не превосходящими n, определяется следующим образом:
При этом x(m) = P(m,m).
|
| 3, 4 | Разработать программу, реализующую рекурсивную функцию f(x, n), вычисляющую величину xn/n! при любом вещественном x и любом неотрицательном целом n. | Для вычисления xn-1/(n-1)! надо рекурсивно обратиться к f(x, n-1), а затем полученную величину умножить на x/n, чтобы получить значение f(x, n). Функция f(x, n)принимает следующий вид:
|
| 5, 6 | Разработать программу, реализующую рекурсивную функцию подсчета количества всех положительных делителей натурального числа n. | Рассмотрим более общую задачу подсчета для натурального числа n количества всех его положительных делителей, меньших или равных заданному натуральному числу x.
Пусть dn(n) и dnx(n, x) - соответственно функции для решения исходной и обобщенной задач.
Рекурсивную функцию dnx(n, x), по которой последовательно подвергаются испытанию на делители n все числа от 1 до x включительно, можно определить так:
Очевидно, что dn(n) = dnx(n, n).
|
| 7, 8 | Задан прямоугольник со сторонами а и b (a, b - натуральные числа). Разбить его на части с помощью квадратов. Определить, сколько квадратов получится, если каждый раз выбирается самый большой квадрат. | Пусть, например, a > b. Тогда, отрезав от прямоугольника floor(a/b) квадратов со сторонами длиной b, снова окажемся перед исходной задачей, в которой a = b и b = mod(a, b) (b = a - floor(a / b) × b).
В качестве базы рекурсии можно взять случай b = 0.
Если numsq(a, b) - функция, возвращающая решение задачи при заданных длинах a и b сторон исходного прямоугольника, то
|
| 9, 10 | Рекурсивно описать функцию C(m, n), где 0<=m<=n, для биноминального коэффициента Сn. | Формулы имеют следующий вид: Сno= Сnn= 1; Сnm= Сn-1m+ Сn-1m-1 |
| 11, 12 | Для целых неотрицательных чисел n, m разрешены операции: нахождения последующего числа (n + 1) и предыдущего числа n-1 (n > 0). Промоделировать с помощью рекурсивных функций операции нахождения суммы (n + m), разности (n - m),умножения (n × m), возведения в степень n ^ m (n > 0) | Для суммы a + b очевидно соотношение:
Оно задает одновременно и базу рекурсии и правило декомпозиции. По нему построена следующая рекурсивная функция:
Для разности:
Умножение:
Возведение в степень:
|
| 13, 14 | Пусть функция f(x) вещественной переменной x непрерывна на отрезке [a, b] и f(a)×f(b) < 0. Разработать рекурсивную программу нахождения на отрезке [a, b] какого-либо вещественного корня. | Для определения корня можно использовать метод деления отрезка пополам. С использованием рекурсии:
Здесь e-заданная точность решения.
|
| 15, 16 | Разработать программу, реализующую рекурсивный алгоритм для вычисления значений полиномов по определенной функции. | Функция имеет следующий вид:
|
В начало практикума
Дата публикования: 2015-02-18; Прочитано: 1554 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!
