c語言裡階乘怎麼表示,如何在c語言中表示階乘
2023-04-02 05:28:04 1
一個數的階乘大家都不陌生,原理很清楚,就是給定一個正整數,然後計算所有小於等於這個正整數的乘積。
這裡我們需要明確幾點:
1.負數沒有階乘,所以默認為正整數。
2的階乘,0是1,這是人為規定的,記住就好。
所以,今天我們的重點是用C語言實現數的階乘,但是我提出一個要求:利用前幾天學過的知識,利用函數和遞歸函數實現數的階乘。
這樣不僅可以複習函數和遞歸函數的方法,還可以鞏固自己的C語言基礎。
在C語言中正式實現數字的階乘之前,我們先來看看邏輯。
一個數的階乘,除了0的階乘是1,正整數的階乘是所有小於等於它的乘積。
給定一個數5,那麼5的階乘就是5!=1x2x3x4x5=120 .
這裡需要用一個循環,就是可以迭代小於5的數。
遍歷1,2,3,4,5後,連續相乘。
初始值為1時,第一次乘法為1,第二次乘法為1和2,直到第五次乘法為前四次乘法的乘積乘以5,最後得到120。
首先給出流程圖給大家理解。有三種方法來實現代碼。第一種是把所有代碼直接寫在主函數裡。
這個方法比較直觀,就是遍歷一個給定的數,從1開始到自身,然後不斷相乘。注意,我一開始在這裡用了一個給定的數相乘,但實際上這是有問題的,我還是要從1開始。畢竟1的階乘是從1開始的。
# includes dio . hint main{ int number;int factorial=1;//因為factorial是factorial的英文scanf(%d ,number);for(int I=1;I=數字;i ) {階乘=i *階乘;//這是為了保證即使number=0,結果也是1} printf(%d ,階乘);}測試結果:
第二種方法是在主函數外面寫一個子函數,然後直接調用主函數裡面的子函數。
# includesdio . hvoid factorial{ int number;int factorial=1;//因為factorial是factorial的英文scanf(%d ,number);for(int I=1;I=數字;i ) {階乘=i *階乘;//這是為了保證即使number=0,結果也是1} printf(%d ,階乘);} int main{ factorial;//可以說是直接執行這部分主代碼然後在main函數中調用}。其實可以發現,這和我們上面直接在主函數裡寫的方法沒什麼區別。唯一不同的是,它看起來更直觀,代碼也不完整。
測試結果:
第三:在主函數之外寫一個遞歸函數,就是讓子函數不斷調用自己。
相比前兩種方法,遞歸函數顯然更容易理解,也明顯使得代碼的利用率更高。因為0的階乘是0,這個要分開判斷,也就是結果是1,然後乘以一個比它小的數。
其實這個邏輯很好理解。給定數字5,那麼5乘以階乘(4),階乘(4)再乘以階乘(3)。以此推理下去,直到最小值乘以1,滿足所有數從1到自身的乘法。
# includesdio . hint factorial(int n){ if(n=0){ return 1;}返回n *階乘(n-1);//乘以一個比它小的正整數} int main{ int number=0;scanf(%d ,編號);printf(%dn ,factorial(number));//相比之前,明顯更簡單}測試結果:
綜上所述,階乘其實挺簡單的,就是要多開一點思路,不要局限於只用一種方法來實現。多利用一些我們之前學過的方法,可以提高代碼的利用率,提高我們的編程能力。