Code:
#include<conio.h>
#include<stdio.h>
#include<alloc.h>
typedef int ElementType;
typedef struct Node{
ElementType Element;
Node*Next;
};
typedef Node *Stack;
Stack MakeNull_Stack(){
Stack Header=(Node*)malloc(sizeof(Node));
(Header)->Next=NULL;
return Header;
}
char Empty_Stack(Stack S){
return S->Next==NULL;
}
Node *Make_Node(ElementType X){
Node*temp=(Node*)malloc(sizeof(Node));
temp->Element=X;
return temp;
}
void Push(Stack S,ElementType X){
Node *temp=Make_Node(X);
temp->Next=S->Next;
S->Next=temp;
}
void Pop(Stack S){
Stack temp;
if(!Empty_Stack(S)){
temp=S->Next;
S->Next=temp->Next;
free(temp);
}
}
ElementType Top(Stack S){
return S->Next->Element;
}
ElementType F(unsigned int n){
Stack S=MakeNull_Stack();
ElementType KQ=0;
Push(S,n);
while(!Empty_Stack(S)){
n=Top(S);
Pop(S);
if(n==0||n==1)
KQ++;
else{
Push(S,n-1);
Push(S,n-2);
}
}
return KQ;
}
void main(){
clrscr();
unsigned int n;
printf("Nhap n=");
scanf("%d",&n);
printf("\nF(%d) =%d",n,F(n));
getch();
}