n的階乘三種實現方法(C語言)

2021-09-29 01:10:37 字數 1662 閱讀 2832

最近整理了曾經寫的程式,把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 的位置 ...