1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
#include <iostream>
// Задача първа:
// Да се реализира рекурсивна функция която връща 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();
}
|