М. Э. Абрамян Programming Taskbook


Рекурсия Простейшие рекурсивные алгоритмы



Pdf көрінісі
бет49/66
Дата11.04.2023
өлшемі0,52 Mb.
#81497
1   ...   45   46   47   48   49   50   51   52   ...   66
Рекурсия
Простейшие рекурсивные алгоритмы
Задания этого раздела можно легко решить и без использования рекур-
сии. Данное обстоятельство связано с тем, что в заданиях рассматриваются
простейшие примеры рекурсии, легко сводимые к итерационным алгоритмам.
Более того, в некоторых случаях непосредственные вычисления по рекурсив-
ным формулам оказываются весьма неэффективными (см., например, задания
Recur4 и Recur6). Однако именно на подобных примерах проще всего получить
первоначальные навыки разработки рекурсивных алгоритмов.
Recur1

. Описать рекурсивную функцию Fact(N) вещественного типа, вычис-
ляющую значение факториала
N! = 1·2·. . .·N
(> 0 — параметр целого типа). С помощью этой функции вычислить
факториалы пяти данных чисел.
Recur2. Описать рекурсивную функцию Fact2(N) вещественного типа, вычис-
ляющую значение двойного факториала
N!! = (N−2)·(N−4)·. . .
(> 0 — параметр целого типа; последний сомножитель в произведении
равен 2, если — четное число, и 1, если — нечетное). С помощью
этой функции вычислить двойные факториалы пяти данных чисел.
Recur3. Описать рекурсивную функцию PowerN(XN) вещественного типа,
находящую значение N-й степени числа по формулам:
X
0
= 1,
X
N
= (X
N/2
)
2
при четных N > 0,
X
N
X ·X
N −1
при нечетных N > 0,
X
N
= 1/X
−N
при < 0
(X 6= 0 — вещественное число, — целое; в формуле для четных долж-
на использоваться операция целочисленного деления). С помощью этой
функции найти значения X
N
для данного при пяти данных значени-
ях N.
Recur4. Описать рекурсивную функцию Fib1(N) целого типа, вычисляющую
N-й элемент последовательности чисел Фибоначчи (— целое число):
F
1
F
2
= 1,
F
K
F
K−2
F
K−1
= 3, 4, . . . .
С помощью этой функции найти пять чисел Фибоначчи с данными но-
мерами, и вывести эти числа вместе с количеством рекурсивных вызовов


106
М. Э. Абрамян. Электронный задачник Programming Taskbook 4.5
функции Fib1, потребовавшихся для их нахождения.
Recur5. Описать рекурсивную функцию Fib2(N) целого типа, вычисляющую
N-й элемент последовательности чисел Фибоначчи (— целое число):
F
1
F
2
= 1,
F
K
F
K−2
F
K−1
= 3, 4, . . . .
Считать, что номер не превосходит 20. Для уменьшения количества ре-
курсивных вызовов по сравнению с функцией Fib1 (см. задание Recur4)
создать вспомогательный массив для хранения уже вычисленных чисел
Фибоначчи и обращаться к нему при выполнении функции Fib2. С помо-
щью функции Fib2 найти пять чисел Фибоначчи с данными номерами.
Recur6. Описать рекурсивную функцию Combin1(NK) целого типа, нахо-
дящую C(NK) — число сочетаний из элементов по — с помощью
рекуррентного соотношения:
C(N, 0) = C(NN) = 1,
C(NK) = C(N − 1, K) + C(N − 1, K − 1) при 0 < N.
Параметры функции — целые числа; > 0, 0 ≤ K ≤ N. Дано число N
и пять различных значений K. Вывести числа C(NK) вместе с количе-
ством рекурсивных вызовов функции Combin1, потребовавшихся для их
нахождения.
Recur7. Описать рекурсивную функцию Combin2(NK) целого типа, нахо-
дящую C(NK) — число сочетаний из элементов по — с помощью
рекуррентного соотношения:
C(N, 0) = C(NN) = 1,
C(NK) = C(N − 1, K) + C(N − 1, K − 1) при 0 < N.
Параметры функции — целые числа; > 0, 0 ≤ K ≤ N. Считать, что
параметр не превосходит 20. Для уменьшения количества рекурсивных
вызовов по сравнению с функцией Combin1 (см. задание Recur6) описать
вспомогательный двумерный массив для хранения уже вычисленных чи-
сел C(NK) и обращаться к нему при выполнении функции Combin2. С
помощью функции Combin2 найти числа C(NK) для данного значения N
и пяти различных значений K.
Recur8. Описать рекурсивную функцию RootK(XKN) вещественного типа,
находящую приближенное значение корня K-й степени из числа по
формуле:
Y
0
= 1,
Y
+1
Y
N
− (Y
N
− X /(Y
N
)
K−1
)/K,
где Y
N
обозначает RootK(XKN) при фиксированных и K. Парамет-
ры функции: (> 0) — вещественное число, (> 1) и (> 0) — целые.


Рекурсия
107
С помощью функции RootK найти для данного числа приближенные
значения его корня K-й степени при шести данных значениях N.
Recur9. Описать рекурсивную функцию NOD(AB) целого типа, находящую
наибольший общий делитель (НОД) двух целых положительных чисел A
и B, используя алгоритм Евклида:
НОД(AB) = НОД(Bmod B), если B 6= 0;
НОД(A, 0) = A.
С помощью этой функции найти НОД(AB), НОД(AC), НОД(AD), если
даны числа ABCD.
Recur10

. Описать рекурсивную функцию DigitSum(K) целого типа, которая
находит сумму цифр целого числа K, не используя оператор цикла. С
помощью этой функции найти суммы цифр для пяти данных целых чисел.
Recur11. Описать рекурсивную функцию MaxElem(AN) целого типа, кото-
рая находит максимальный элемент целочисленного массива размера N
(1 ≤ N ≤ 10), не используя оператор цикла. С помощью этой функции
найти максимальные элементы массивов ABразмера N
A
N
B
N
C
соответственно.
Recur12. Описать рекурсивную функцию DigitCount(S) целого типа, которая
находит количество цифр в строке S, не используя оператор цикла. С
помощью этой функции найти количество цифр в каждой из пяти данных
строк.
Recur13. Описать рекурсивную функцию Palindrom(S) логического типа, воз-
вращающую
TRUE
, если строка является палиндромом (то есть читается
одинаково слева направо и справа налево), и
FALSE
в противном случае.
Оператор цикла в теле функции не использовать. Вывести значения функ-
ции Palindrom для пяти данных строк.


Достарыңызбен бөлісу:
1   ...   45   46   47   48   49   50   51   52   ...   66




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет