#include #include #include #include #include #include #include #include #include #include #include using namespace std; struct paar { int index; int entry; }; struct paars // sparse array of pair type { paar memo; paars*left; paars*right; }; paars*allpaar = nullptr; int functionF(int); int fetch(paars*&crrnt,int indx) { if(crrnt) if(indx < crrnt->memo.index) return fetch(crrnt->left,indx); else if(indx > crrnt->memo.index) return fetch(crrnt->right,indx); else return crrnt->memo.entry; else { crrnt = new paars; crrnt->left = nullptr; crrnt->right = nullptr; crrnt->memo.index = indx; crrnt->memo.entry = functionF(indx); return crrnt->memo.entry; } } int fetch(int indx) { return fetch(allpaar,indx); } int functionF(int n) { if(n <= 0) return 1; //else return 1 + fetch(n/6) + fetch(n/3) + fetch(n/2); else return n*n + fetch(3*n/5) + fetch(4*n/5); } void traverse(paars*crrnt) { if(crrnt) { paar thismemo = crrnt->memo; traverse(crrnt->left); cout << "F(" << thismemo.index << ") = " << thismemo.entry << endl; traverse(crrnt->right); } } int main() { allpaar = nullptr; cout << "Enter an integer: "; int n; cin >> n; cout << n << endl; fetch(n); traverse(allpaar); return 1; }