源代码:
#include <iostream>
using namespace std;
#define MAX_SIZE 20
typedef struct {int n, r1, r2;}ElemTp; // r1 = f(n-1) r2 = f(n-2)
int fabonacci(int n){
ElemTp *s = new ElemTp[MAX_SIZE];
int top = -1; //栈顶指针
ElemTp a = {n, -1, - 1}; //-1表示还未求出值
s[++top] = a; //压栈
int r; //r用于保存r1 + r2 也就是f(n-1) + f(n-2)的值
while(1){
if(s[top].r1 != -1 && s[top].r2 != -1){ //当栈顶元素的前两位都求出时
r = s[top].r1 + s[top].r2;
--top; //退栈
if(top == -1) break; //为空栈时退出循环 返回最终的结果
if(s[top].r1 == -1) s[top].r1 = r; //r1为-1时 将结果赋给r1
else s[top].r2 = r;
}
else{
if(s[top].n == 1 || s[top].n == 0){
s[top].r1 = 1; s[top].r2 = 0;
}
else{
a.n = s[top].n - 1; a.r1 = -1; a.r2 = -1; // (n - 1, -1, -1)
if(s[top].r1 != -1) a.n--; //如果栈顶元素的r1已求得 则需要求出r2 因此将(n - 2, -1, -1)压栈
s[++top] = a; //压栈
}
}
}
delete[] s;
return r;
}
int main()
{
for (int i = 0; i < 10;i++){
cout << fabonacci(i) << " ";
}
}