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

(используем ConsoleApp (Net.Framework))

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

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

  1. Найти факториал целого числа. (double 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. Дан список целых чисел. Вычислить сумму его элементов (int ListSum(IList<int> list, int n = 0) ), пользуясь следующим рекурсивным определением:

    Подсказка

    Сумма элементов = 
        первый элемент
        +
        сумма всех остальных элементов.
  8. Дано целое число N ≥ 1. Последовательность Fk чисел Фибоначчи (названа в честь Леонардо Пизанского) определяется следующим образом:
    F1=1,F2=1,Fk=Fk2+Fk1,k=3,4,
    Это целые числа: 1,1,2,3,5,8,13,21,34,55,… Создать функцию int fib(int n, int a = 1, int b = 1), которая возвращает число Фибоначчи под номером n (пользуемся алгоритмом по ссылке). Метод должен принимать только положительные числа (используем Debug.Assert) В задаче удобно воспользоваться вложенной функцией.
  9. Создать функцию int DigProduct(int n), которая возвращает произведение цифр числа.
  10. Создать функцию void PrimeFactors(int n, int k = 2), выводит на все консоль простые множители положительного числа (единица и само исходное число не учитываются, используем цикл).