tft每日頭條

 > 生活

 > c語言算1到20的階乘相加

c語言算1到20的階乘相加

生活 更新时间:2025-02-02 02:56:43

數的階乘,想必大家都不陌生,原理也很清楚,就是給定一個正整數,然後求出所有小于以及等于該正整數的積。

這裡我們要清楚幾點:

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。

首先是給出流程圖,方便大家理解。

c語言算1到20的階乘相加(用C語言實現數的階乘)1

用三種方法進行代碼實現

第一種:普通的直接在主函數中寫出所有代碼。

用該方法就比較直觀了,就是遍曆給定數,從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); }

測試結果:

c語言算1到20的階乘相加(用C語言實現數的階乘)2

第二種:在主函數外寫一個子函數,然後在主函數内直接進行調用該子函數。

#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();//可以說,就是直接把主要代碼這部分給拎出來,然後在主函數調用 }

其實可以發現,這與我們上面的直接在主函數裡寫的方法沒什麼差别,唯一的區别就是看起來更加直觀一些,以及代碼錯落有緻一點。

測試結果:

c語言算1到20的階乘相加(用C語言實現數的階乘)3

第三種:在主函數外寫一個遞歸函數,也就是讓子函數不停調用它自身。

與前兩個方法相比,遞歸函數顯然更好理解一些,也顯然讓代碼的利用率更高了,因為0的階乘是0,所以這應該單獨進行判斷,也就是得到結果為1,之後就是讓它本身與比它小的數相乘了。

其實這個邏輯很好理解,給定數5,然後5去與factorial(4)相乘,同時factorial(4)又是4與factorial(3)相乘,與此推理下去,直到最小是與1相乘即可,那就滿足了從1開始到它本身的所有數相乘。

#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("%d\n",factorial(number)); //與之前相比,顯然變得更簡單了些 }

測試結果:

c語言算1到20的階乘相加(用C語言實現數的階乘)4

總結

總的來說,階乘其實蠻簡單的,就是大家的思維要再打開一些,不要局限于隻用一種方法來實現,多利用之前學過的一些方法,代碼的利用率還能變高,也能提升自己的編程能力。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved