Лабораторная работа №7. Рекурсия
Требуемые условия завершения
Открыто с: четверг, 28 марта 2019, 11:55
Срок сдачи: четверг, 28 марта 2019, 13:30
(используем ConsoleApp (Net.Framework))
Во всех заданиях запрещено применять циклы — пользуйтесь рекурсией. (циклы допустимы лишь в функции main()
). Для тестирования кода используем модульные тесты
Решения задач оформлять в виде отдельных функций в файле recurcia.cpp
. В файле main.cpp
необходимо продемонстрировать работу полученных функций.
- Найти факториал целого числа. (
double Factorial(int n)
)Подсказка
Продемонстрируйте работу подпрограммы в основной программы, выведите на консоль факториалы целых чисел от нуля до десяти.Факториал числа n равняется 1, если n равен нулю или единице, n*(n-1)!, если n>1
- Написать рекурсивную подпрограмму
void IntNumbersPrint(int a, int b)
, печатающую все целые числа от a до b включительно (a ≤ b, не забудьте проверить с это с помощью assert).Подсказка
Напечатать числа от a до b — напечатать a, напечатать числа от a + 1 до b.
- Даны два целых числа a и b. Написать рекурсивную подпрограмму
void IntNumbersPrintAD(int a, int b)
, которая выводит все числа от a до b включительно, в порядке возрастания, если a < b, или в порядке убывания в противном случае. - Даны два целых числа a и b. Написать рекурсивную подпрограмму
void IntNumbersPrintAscending(int a, int b)
, которая выводит все числа от a до b включительно в порядке возрастания, независимо от того, какое из двух чисел a и b больше. - Дано натуральное число n. Написать функцию
bool DegreeOfTwo(int a)
, которая возвращает true, если число n является точной степенью двойки, или false в противном случае. Даны целые числа a и b. Найти их наибольший общий делитель (
int GreatestCommonDivisor(int a, int b)
), используя алгоритм Евклида:НОД(A, B) = НОД(B, A % B), если B ≠ 0; НОД(A, 0) = A.
- Дан список целых чисел. Вычислить сумму его элементов (
), пользуясь следующим рекурсивным определением:int ListSum(IList<int> list, int n = 0) Подсказка
Сумма элементов = первый элемент + сумма всех остальных элементов.
- Дано целое число N ≥ 1. Последовательность Fk чисел Фибоначчи (названа в честь Леонардо Пизанского) определяется следующим образом:Это целые числа: 1,1,2,3,5,8,13,21,34,55,… Создать функцию
F1=1,F2=1,Fk=Fk−2+Fk−1,k=3,4,… int fib(int n, int a = 1, int b = 1)
, которая возвращает число Фибоначчи под номером n (пользуемся алгоритмом по ссылке). Метод должен принимать только положительные числа (используем Debug.Assert) В задаче удобно воспользоваться вложенной функцией. - Создать функцию
int DigProduct(int n)
, которая возвращает произведение цифр числа. - Создать функцию
void PrimeFactors(int n, int k = 2)
, выводит на все консоль простые множители положительного числа (единица и само исходное число не учитываются, используем цикл).