最近整理了曾經寫的程式,把n的階乘三種實現方法與小夥伴們分享,希望能給初學者一些幫助。
1、遞迴
#include
intfact
(int n)
;int
main()
intfact
(int n)
//遞迴函式
2、棧(遞迴的本質,實現基於棧這一儲存方式)
#include
#include
typedef
int datatype;
struct seqstack
;typedef
struct seqstack *pseqstack;
// 此處,實際上是定義一種資料型別(struct seqstack *),返回指標。可以理解為返回struct sepstack 的位址,
//函式宣告
intfact
(int n)
;
pseqstack createemptystack_seq
(int m)
;//建立空棧
void
push_seq
(pseqstack pstack,datatype x)
;//入棧函式
datatype isemptystack_seq
(pseqstack pstack)
;//判斷棧是否為空的函式
datatype top_seq
(pseqstack pstack)
;//取棧頂元素的函式
void
pop_seq
(pseqstack pstack)
;//出棧函式
intmain()
intfact
(int n)
res=1;
while(!
isemptystack_seq
(st)
)//如果棧不空 ,則取棧頂元素 ,然後將從棧中彈出此元素
free
(st)
;//釋放空間
return res;
//返回n的階乘
}pseqstack createemptystack_seq
(int m)
//建立空棧 }}
void
push_seq
(pseqstack pstack,datatype x)
}int
isemptystack_seq
(pseqstack pstack)
//判空函式,判斷棧頂變數是否為-1
datatype top_seq
(pseqstack pstack)
}void
pop_seq
(pseqstack pstack)
3 for迴圈
#include
intmain()
printf
("%d"
,mul)
;//列印n的階乘mul
}
這些程式都比較簡單,初學c語言的話,可能第二個程式比較費勁,學了資料結構自然就不存在問題了。 階乘的三種實現方式
以下三種方式分別採用了不同的方法,第一種是最容易理解的,第二種是最pythonic的,而第三種則是易用性最高的。第三種直接定義乙個階乘函式,隨時都可以呼叫,從而得到不同值。普通方法 a 1n 5for i in range 1 n 1 a a i print a 20reduce 函式 from f...
C語言遞迴實現n的階乘(n )
非負整數n的階乘可以表示為n 讀作 n的階乘 其定義如下 n n n 1 n 2 1 n大於或等於l 且n 0時,n l 例如,5 5 4 3 2 1 120。請編寫乙個程式,讀入乙個非負整數,計算並輸出其階乘。思路 階乘 就是每次用自己乘以自己 1,然後用自己 1在乘自己 1 1 利用遞迴的性質可...
三種基本排序方法 C語言實現
接下來上 include int main void for j 0 ja j 1 if 1 f f為1說明沒進行過冒泡,說明序列有序 break 若序列有序,則跳出排序即可 接下來上 include int main void 每排序一次,就會將a i 包括a i 之後的最小值放在a i 的位置 ...