#include <iostream>
#include <vector>
using namespace std;
void countDown(int count) {
cout << "push " << count << endl;
countDown(count - 1);
}
// don't run, causes infinite recursion!
countDown(5)
void countDownAgain(int count) {
cout << "push " << count << endl;
if (count > 0)
countDownAgain(count - 1);
else
cout << "stop recursion" << endl; // base case
cout << "pop " << count << endl;
}
countDownAgain(5)
push 5 push 4 push 3 push 2 push 1 push 0 stop recursion pop 0 pop 1 pop 2 pop 3 pop 4 pop 5
long factorial(long n) {
if (n <= 1)
return 1;
return n * factorial(n-1);
}
factorial(8)
40320
factorial(20)
2432902008176640000
long fibonacci(long n) {
if (n < 2) return n;
return fibonacci(n-1) + fibonacci(n-2);
}
for(int i=0; i < 20; i++)
cout << fibonacci(i) << " ";
cout << endl;
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
int vectorSum(vector<int> v) {
if (v.empty()) return 0;
int last = v.back();
v.pop_back();
return vectorSum(v) + last;
}
vector<int> v{1,3,7,9,11};
vectorSum(v)
31
v
{ 1, 3, 7, 9, 11 }
vector<int> v2;
vectorSum(v2)
0
class Node {
public:
int data;
Node *left;
Node *right;
Node(int d) {
data = d;
left = nullptr;
right = nullptr;
}
}
// create a bnary tree
auto root = new Node(1), n2 = new Node(2), n3 = new Node(3),
n4 = new Node(4), n5 = new Node(5);
root->left = n2;
root->right = n3;
n2->left = n4;
n3->right = n5;
// height of a node?
int treeHeight(Node * n) {
if (n == nullptr)
return -1;
// if (n->left == nullptr && n->right == nullptr) {
// }
int leftHeight = treeHeight(n->left);
int rightHeight = treeHeight(n->right);
if (leftHeight > rightHeight)
return leftHeight + 1;
else
return rightHeight + 1;
}
treeHeight(root)
2
treeHeight(n5)
0
treeHeight(nullptr)
-1