資料結構練習之用棧來遞迴實現5的階乘#C語言實現
阿新 • • 發佈:2018-10-31
剛學資料結構,給大家分享一下今天學習資料結構的棧中的一個練習
也算是順便記錄一下學習過程
#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