1
+ // https://www.geeksforgeeks.org/find-the-nth-row-in-pascals-triangle/
2
+
3
+ #include < iostream>
4
+ #include < vector>
5
+
6
+ template <typename T>
7
+ void print (std::vector<T>& items)
8
+ {
9
+ if (items.size () == 0 ) {
10
+ return ;
11
+ }
12
+
13
+ for (auto item : items) {
14
+ std::cout << item << " " ;
15
+ }
16
+ std::cout << " \n " ;
17
+ }
18
+
19
+ std::vector<int > generatePascalTriangleRec (int row)
20
+ {
21
+ std::vector<int > currentRow;
22
+ currentRow.push_back (1 );
23
+
24
+ if (row == 0 ) {
25
+ return currentRow;
26
+ }
27
+
28
+ std::vector<int > previousRow = generatePascalTriangleRec (row - 1 );
29
+
30
+ for (int i = 1 ; i < previousRow.size (); ++i) {
31
+ currentRow.push_back (previousRow[i - 1 ] + previousRow[i]);
32
+ }
33
+
34
+ currentRow.push_back (1 );
35
+
36
+ return currentRow;
37
+ }
38
+
39
+ std::vector<int > generatePascalTriangleIter (int row)
40
+ {
41
+ int previous = 1 ;
42
+ std::vector<int > currentRow;
43
+ currentRow.push_back (1 );
44
+
45
+ for (int i = 1 ; i <= row; ++i) {
46
+ int current = previous * (row - i + 1 ) / i;
47
+ currentRow.push_back (current);
48
+ previous = current;
49
+ }
50
+ return currentRow;
51
+ }
52
+
53
+ int main ()
54
+ {
55
+ int n = 10 ;
56
+
57
+ std::cout << " Recursive\n " ;
58
+ for (int i = 0 ; i < n; ++i) {
59
+ std::cout << " Row " << i << " : " ;
60
+ std::vector<int > numbers = generatePascalTriangleRec (i);
61
+ print (numbers);
62
+ }
63
+
64
+ std::cout << " ===============================\n " ;
65
+ std::cout << " Iterative\n " ;
66
+ for (int i = 0 ; i < n; ++i) {
67
+ std::cout << " Row " << i << " : " ;
68
+ std::vector<int > numbers = generatePascalTriangleIter (i);
69
+ print (numbers);
70
+ }
71
+ }
0 commit comments