用栈实现斐波拉契数列
#include <iostream>
#include<assert.h>
#define defaultSize 46
template<typename E> class AStack {
private:
int maxsize;
int top;
E *listArray;
public:
AStack(int size = defaultSize) {
maxsize = size;
top = 0;
listArray = new E[size];
}
~AStack() { delete[] listArray; }
void clear() { top = 0; }
void push(const E& it) {
listArray[top++] = it;
}
E pop() {
return listArray[--top];
}
E topValue() {
return listArray[top - 1];
}
int length() const {
return top;
}
};
long int fibr(int n) {
long int result=0;
AStack<int> S;
S.push(n);
while (S.length() != 0) {
int nn=S.pop();
if (nn == 1 | nn == 2) {
result += 1;
}
else {
S.push(nn - 1);
S.push(nn - 2);
}
}
return result;
}
int main()
{
int n;
std::cin >> n;
long int result = fibr(n);
std::cout << result<<std::endl;
}