Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
YaP_laby.pdf
Скачиваний:
156
Добавлен:
31.05.2015
Размер:
915.49 Кб
Скачать

ЛАБОРАТОРНАЯ РАБОТА № 12 РЕКУРСИВНЫЕ ФУНКЦИИ

Цель работы – овладеть навыками программирования рекурсивных функций и обращения к ним.

Задания

1.Изучить:

а) правила записи программ, использующих рекурсивные функции; б)порядок выполнения программ, использующих рекурсивные функ-

ции.

2.Разработать алгоритм решения в соответствии с заданием.

3.Составить программу решения задачи.

4.Подготовить тестовый вариант программы и исходных данных.

Контрольныевопросы

1.Указать, при каких условиях целесообразно использование рекурсивных функций, какие выгода они предоставляют пользователю.

2.Указать, в чем отличие рекурсивных функций.

3.Указать способы обращения к рекурсивным функциям.

4.Пояснить, как и куда осуществляется выход из рекурсивной функ-

ции.

Вариантызаданий

1.В программе о восьми ферзях (рекурсивной) подсчитайте, сколько было сделано возвратов назад.

2.Постройте синтаксический анализатор для понятия «идентификатор». <Идентификатор> :: <буква> | <идентификатор> (<цифра> | <буква>).

3.Описать рекурсивную функцию Fib(N) целого типа, вычисляющую N

числоФибоначчи F(N) поформуле:

F (1) = F (2) =1, F(k) = F(k 2) + F(k 1), k =3, 4,... .

С помощью этой функции вычислить 10 чисел Фибоначчи с указанны-

ми номерами.

 

4. Описать рекурсивную функцию NOD2(A, B) целого типа,

находя-

щую наибольший общий делитель (НОД) двух натуральных чисел A и B ,

используя алгоритм Евклида: НОД(A, B) = НОД(B mod A, A) , если

A 0 ;

 

 

Языки программирования. Метод. указания по лаб. работам

-63-

ЛАБОРАТОРНАЯ РАБОТА № 12 РЕКУРСИВНЫЕ ФУНКЦИИ

Варианты заданий

НОД(0, B) = B . С помощью этой функции найти наибольшие общие делители пар А и В, A и С, A и D, если даны числа A, B, C, D.

5.Расставьте на шахматной доске 8 ладей так, чтобы ни одна ладья не угрожала другой.

6.Составить программу вычисления арифметического выражения при условии, что в нем участвуют только операции сложения и вычитания.

7.Дано множество n-мерных векторов. Удалить из этого множества минимальное количество векторов так, чтобы среди оставшихся не было ортогональных.

8.Дано n женихов и k невест. Известен их возраст. Сформировать наибольшее количество пар так, чтобы разница в возрасте была не больше заданного t.

9.Дан массив. Массив состоит из нулей и единиц. Найти самую большую последовательность, которая состоит из одних нулей.

10.Составить программу вычисления арифметического выражения при условии, что в нем участвуют только операции умножения и деления..

11.Написать программу генерирования всех k-элементных подмножеств n -элементного множества, использующую рекурсивный алгоритм.

12.Написать программу генерирования всех перестановок n -элемент- ного множества, использующую рекурсивный алгоритм. Перестановки генерировать в лексикографическом порядке.

13.Написать программу генерирования всех перестановок n -элемент- ного множества, использующую рекурсивный алгоритм. Перестановки генерировать в нелексикографическом порядке.

14.Составьте программу проверок скобок в алгебраическом выражении.

15.Дан массив. Найти подмножество, которое образует самую длинную арифметическую прогрессию.

16.Имеется n костей домино выстроить из них правильную последовательность максимальной длины (комплект костей произвольный).

17.В Матрице размером M х N, которая состоит из нулей и единиц, найти самую большую квадратную подматрицу, которая состоит целиком из нулей.

18.Определить, сколькими способами можно представить натуральное

число N в виде суммы N = a1 + a2 +... + ak натуральных слагаемых. Вывести все разбиения.

19.Дан массив. Удалить наименьшее число элементов так, чтобы оставшиеся составили возрастающую последовательность.

20.Найти корень уравнения (34)x1 43 = 12 ( 43)3x4 на отрезке [0,4].

Языки программирования. Метод. указания по лаб. работам

-64-

ЛАБОРАТОРНАЯ РАБОТА № 12 РЕКУРСИВНЫЕ ФУНКЦИИ

Варианты заданий

21.На плоскости даны n красных и n синих точек. Построить n отрезков с разными концами, суммарная длина которых минимальна.

22.Составьте программу для задачи о восьми ферзях (рекурсивной) при условии, что ферзь устанавливается на вторую клетку первой вертикали.

23.Дана шахматная доска n х n. Конь находится на поле с координатами (x,y). Вычислить обход доски так, чтобы конь совершил обход всей доски при условии, что каждое поле посещается ровно один раз.

24.«Задача о лабиринте». Дано клеточное поле. Часть клеток занята препятствиями. Надо пройти из одной заданной клетки в другую заданную клетку.

25.«Задача о рюкзаке». Из заданных n предметов выбрать такие, чтобы их суммарный вес не превышал k кг, а стоимость была наибольшей.

26.Дана позиция коня на шахматной доске. Определить, можно ли сделать указанный ход конем по правилам игры.

27.Дана позиция короля на шахматной доске. Определить, можно ли сделать указанный ход королем по правилам игры.

28.Дана позиция слона на шахматной доске. Определить, можно ли сделать указанный ход слоном по правилам игры.

29.Дана позиция ладьи на шахматной доске. Определить, можно ли сделать указанный ход ладьей по правилам игры.

30.Дана позиция ферзя на шахматной доске. Определить, можно ли сделать указанный ход королем по правилам игры.

Техника программирования рекурсивных программ подробно излагается в метод. указаниях Шитов, Ю. А. Рекурсия / Ю. А. Шитов. – Красноярск :

ИПЦ КГТУ, 2003. – 63 с.

Студентам необходимо разобраться в данном методическом указании перед выполнением лабораторной работы.

Языки программирования. Метод. указания по лаб. работам

-65-

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]