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();
}