1. 程式人生 > >資料結構練習之用棧來遞迴實現5的階乘#C語言實現

資料結構練習之用棧來遞迴實現5的階乘#C語言實現

剛學資料結構,給大家分享一下今天學習資料結構的棧中的一個練習
也算是順便記錄一下學習過程

#include <stdio.h>
typedef struct StackNode
{
	int vn;		//儲存n的值
	int vf;		//儲存fun(n)的值
	int tag;	//標記是否求出值 
} ST[20];
int top = -1;		//全域性變數指標
ST St;		//全域性變數
int fun(int n)
{
	top++;		//進棧
	St[top].vn = n;		//初值為n
	St[top].tag = 1;	//標記,不可求值
	while(top>-1)
	{
		if(St[top].tag == 1)	//不可求值 
		{
			if(St[top].vn == 1 || St[top].vn == 0)
			{
				St[top].vf = 1;
				St[top].tag = 0;
			}
			else{
				top++;
				St[top].vn = St[top - 1].vn - 1;
				St[top].tag = 1;
			}
		}
			else if(St[top].tag == 0)	//可以直接求值 
			{
				St[top - 1].vf = St[top - 1].vn*St[top].vf;//棧內元素的vf為最終的值 
				St[top - 1].tag = 0;
				top--;
			}
			if(top == 0 && St[top].tag == 0)
				break;
		}
		return(St[top].vf);		//得到最終的值 
	 
} 
int main()
{
	printf("%d\n",fun(5));
	return 0;
}
//執行結果:120