用栈来处理递归程序。
typedef struct stack
{
int *base;
int *top;
int size;
}*LinkStack;
void Init(LinkStack &S)
{
S=new stack;
S->size=10;
S->base=new int[S->size];
S->top=S->base;
}
void Push(LinkStack S,int n)
{
if(S->top-S->base==S->size)
{
S->base=(int *)realloc(S->base,sizeof(stack)*(S->size+10));
S->size+=10;
}
*S->top++=n;
}
void Pop(LinkStack S,int &n)
{
if(S->base==S->top)
{
return;
}
S->top--;
n=*S->top;
}
int StackEmpty(LinkStack S)
{
if(S->top==S->base)
{
return 0;
}
else
{
return 1;
}
}
void DestoryStack(LinkStack S)
{
delete[] S->base;
delete S;
}
int Fib(LinkStack S,int n)
{
int m;
int k=0;
Push(S,n-1);
while(StackEmpty(S))
{
Pop(S,m);
if(m==0||m==1)
{
k++;
}
else
{
Push(S,m-1);<span style="white-space:pre"> </span>//分解问题
Push(S,m-2);
}
}
DestoryStack(S);
return k;
}
int main()
{
int n=0;
cin>>n;
LinkStack S;
Init(S);
cout<<Fib(S,n)<<endl;
return 0;
}