階乘c語言程序函數調用 階乘c++語言程序函數



文章插圖
階乘c語言程序函數調用 階乘c++語言程序函數

文章插圖
數的階乘,想必大家都不陌生,原理也很清楚,就是給定一個正整數,然后求出所有小于以及等于該正整數的積 。
這里我們要清楚幾點:
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開始的 。
#include<stdio.h>int main(){int number;int factorial = 1;//因為factorial是階乘的英文scanf("%d", &number);for(int i=1; i<=number; i++) {factorial = i*factorial;//這樣是確保即便當number=0的時候,結果也為1}printf("%d ", factorial);}測試結果:
第二種:在主函數外寫一個子函數,然后在主函數內直接進行調用該子函數 。
#include<stdio.h>void factorial(){int number;int factorial = 1;//因為factorial是階乘的英文scanf("%d", &number);for(int i=1; i<=number; i++) {factorial = i*factorial;//這樣是確保即便當number=0的時候,結果也為1}printf("%d ", factorial);}int main(){factorial();//可以說,就是直接把主要代碼這部分給拎出來,然后在主函數調用}其實可以發現,這與我們上面的直接在主函數里寫的方法沒什么差別,唯一的區別就是看起來更加直觀一些,以及代碼錯落有致一點 。
測試結果:
第三種:在主函數外寫一個遞歸函數,也就是讓子函數不停調用它自身 。
與前兩個方法相比,遞歸函數顯然更好理解一些,也顯然讓代碼的利用率更高了,因為0的階乘是0,所以這應該單獨進行判斷,也就是得到結果為1,之后就是讓它本身與比它小的數相乘了 。
其實這個邏輯很好理解,給定數5,然后5去與factorial(4)相乘,同時factorial(4)又是4與factorial(3)相乘,與此推理下去,直到最小是與1相乘即可,那就滿足了從1開始到它本身的所有數相乘 。
【階乘c語言程序函數調用 階乘c++語言程序函數】#include<stdio.h>int factorial(int n){if(n<=0){return 1;}return n*factorial(n-1);//與比它小的正整數相乘}int main(){int number = 0;scanf("%d", &number);printf("%dn",factorial(number));//與之前相比,顯然變得更簡單了些}測試結果:
總結
總的來說,階乘其實蠻簡單的,就是大家的思維要再打開一些,不要局限于只用一種方法來實現,多利用之前學過的一些方法,代碼的利用率還能變高,也能提升自己的編程能力 。