#include"iostream"#include"Queue"#include"Cmath"using namespacestd;intFIB1 (intIndex//Recursive Implementation{ if(index<1) { return-1; } if(index==1|| index==2) return 1; returnFIB1 (index-1) +FIB1 (index-2);}intFIB2 (intIndex//Array implementations{ if(index<1) { return-1; } if(index<3) { return 1; } int*a=New int[index]; a[0]=a[1]=1; for(intI=2; i<index;i++) A[i]=a[i-1]+a[i-2]; intm=a[index-1]; Delete A; //free up memory space returnm;}intFIB3 (intIndex//borrowing vector<int> to achieve{ if(index<1) { return-1; } Vector<int> A (2,1);//Create a vector containing 2 elements of 1A.reserve (3); for(intI=2; i<index;i++) {A.insert (A.begin (), a.at (0) +a.at (1)); A.pop_back (); } returnA.at (0);} intFIB4 (intIndex//Queue Implementation{ if(index<1) { return-1; } Queue<int>q; Q.push (1); Q.push (1); for(intI=2; i<index;i++) {Q.push (Q.front ()+q.back ()); Q.pop (); } returnq.back ();}intFIB5 (intN//Iterative implementations{ intI,a=1, b=1, c=1; if(n<1) { return-1; } for(i=2; i<n;i++) {C=a+b;//the method of tossing and adding (similar to the greatest common divisor method of finding)A=b; b=C;} returnC;}intFib6 (intN) { DoubleGh5=sqrt ((Double)5); return(Pow (1+GH5), N)-pow ((1(-GH5), N)/(POW (Double)2, N) *gh5);} intMainvoid) {printf ("%d\n", FIB3 (6)); System ("Pause"); return 0;}
Multiple implementations of the Fibonacci sequence