Лабораторная работа №7. Рекурсия

Во всех заданиях запрещено применять циклы — пользуйтесь рекурсией. (циклы допустимы лишь в функции main())

Решения задач оформлять в виде отдельных функций в файле recurcia.cpp . В файле main.cpp необходимо продемонстрировать работу полученных функций: запрос у пользователя, задание с каким номером он хочет проверить, в зависимости от его ответа  оператор switch  выполняет запуск нужной функции, 0 для выхода.

  1. Найти факториал целого числа. (long int factorial(int n))

    Подсказка

     Факториал числа n равняется 
        1, если n равен нулю или единице, 
        n*(n-1)!, если n>1
    Продемонстрируйте работу подпрограммы в основной программы, выведите на консоль факториалы целых чисел от нуля до десяти.
  2. Написать рекурсивную подпрограмму void IntNumbersPrint(int a, int b), печатающую все целые числа от a до b включительно (a ≤ b, не забудьте проверить с это с помощью assert).

    Подсказка

    Напечатать числа от a до b — 
        напечатать a, 
        напечатать числа от a + 1 до b.
  3. Даны два целых числа a и b. Написать рекурсивную подпрограмму void IntNumbersPrintAD(int a, int b), которая выводит все числа от a до b включительно, в порядке возрастания, если a < b, или в порядке убывания в противном случае.
  4. Даны два целых числа a и b. Написать рекурсивную подпрограмму void IntNumbersPrintAscending(int a, int b), которая выводит все числа от a до b включительно в порядке возрастания, независимо от того, какое из двух чисел a и b больше.
  5. Дано натуральное число n. Написать функцию bool DegreeOfTwo(int a), которая возвращает true, если число n является точной степенью двойки, или false в противном случае.
  6. Даны целые числа a и b. Найти их наибольший общий делитель (int GreatestCommonDivisor(int a, int b)), используя алгоритм Евклида:

    НОД(A, B) = НОД(B, A % B), если B ≠ 0; 
    НОД(A, 0) = A.
  7. Дан вектор. Вычислить сумму его элементов (T VecSum(vector<T> vec, int n = 0) ), пользуясь следующим рекурсивным определением:

    Подсказка

    Сумма элементов массива = 
        первый элемент
        +
        сумма всех остальных элементов.
  8. Дано целое число N ≥ 1. Последовательность Fk чисел Фибоначчи (названа в честь Леонардо Пизанского) определяется следующим образом: \[F_1 = 1, \quad F_2 = 1, \quad F_k = F_{k-2} + F_{k-1}, \; k = 3, 4, \ldots\] Это целые числа: 1,1,2,3,5,8,13,21,34,55,… Создать функцию int fib(int n, int a = 1, int b = 1), которая возвращает число Фибоначчи под номером n (пользуемся алгоритмом по ссылке).
  9. Создать функцию int DigProduct(int n), которая возвращает произведение цифр числа.
  10. Создать функцию void PrimeFactors(long int n, int k = 2), выводит на все консоль простые множители числа (единица и само исходное число не учитываются, используем цикл).