数据结构练习之用栈来递归实现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

猜你喜欢

转载自blog.csdn.net/weixin_43274097/article/details/83545758