斐波那契数列计算(非递归方法)
tag=1代表还未计算,tag=2代表已计算,计算fib(5),则需要先计算出fib(2)、fib(3)和fib(4),因此先进行入栈,sum计算这些数值;当这个栈不为空,即fib(5)未被计算,弹出栈,先计算fib(2),fib(2)tag=1,还未被计算,因此,n=n-2(代表fib(0)),sum此时已计算fib(1),因此fib(2)=sum+fib(0),其他同理弹出,直至计算出fib(5)
int fib(int n){
BiTNode *w;
SqStack st;
int sum=0;
InitStack(st);
do{
while(n>1){
w=(BiTNode*)malloc(sizeof(BiTNode));
w->data=n;
w->tag=1;
Push(st,w);
n--;
}
sum=sum+n;
while(!StackEmpty(st)){
Pop(st,w);
if(w