#include // Задача първа: // Да се реализира рекурсивна функция която връща n! int fac(int n) { if (n < 2) return 1; return n * fac(n - 1); } void ex1() { int n; std::cin >> n; std::cout << fac(n) << std::endl; } // Задача втора: // Да се напише рекурсивна функция, която повдига число на степен. int pow(int n, int power) { if (power == 0) return 1; return n * pow(n, power - 1); } void ex2() { int n, power; std::cin >> n >> power; std::cout << pow(n, power) << std::endl; } // Задача трета: // Да се напише рекурсивна функция, която намира сумата на цифрите на число. int digitSum(int n) { if (n == 0) return 0; return n % 10 + digitSum(n / 10); } void ex3() { int n; std::cin >> n; std::cout << digitSum(n) << std::endl; } // Задача четвърта: // Да се напише рекурсивна функция, която намира произведението на две числа. int prod(int n, int m) { if (m == 0) return 0; return n + prod(n, m - 1); } void ex4() { int n, m; std::cin >> n >> m; std::cout << prod(n, m) << std::endl; } // Задача пета: // Да се напише рекурсивна функция, която обръща число. int len(int n) { if (n / 10 == 0) return 1; return len(n / 10) + 1; } int rev(int n) { if (n / 10 == 0) return n; return rev(n / 10) + (n % 10) * pow(10, len(n) - 1); } void ex5() { int n; std::cin >> n; std::cout << rev(n) << std::endl; } // Задача шеста: // Да се напише рекурсивна функция, която проверява дали число е просто. bool isPrime(int n, int m = 2) { if (n == m) return true; return (n % m != 0) && isPrime(n, m + 1); } void ex6() { int n; std::cin >> n; std::cout << isPrime(n) << std::endl; } // Задача седма: // Да се напише рекурсивна функция, която превръща число от десетична в двоична // бройна система. int toBinary(int n) { if (n == 0) return 0; return n % 2 + toBinary(n / 2) * 10; } void ex7() { int n; std::cin >> n; std::cout << toBinary(n) << std::endl; } // Задача осма*: // Да се напише функция, която принтира всички булеви вектори с дължина n. void printPaddingZeroes(int count) { if (count == 0) return; std::cout << 0; printPaddingZeroes(count - 1); } void printBooleanVectors(const int n, int padding = 0) { if (n == -1) return; printPaddingZeroes(padding); std::cout << toBinary(n) << std::endl; if (n > 1 && (n & (n - 1)) == 0) padding++; printBooleanVectors(n - 1, padding); } void ex8() { int n; std::cin >> n; printBooleanVectors((1 << n) - 1); } int main() { ex8(); }