導航:首頁 > 編程知識 > 階乘編程用遞歸怎麼表示c語言

階乘編程用遞歸怎麼表示c語言

發布時間:2024-08-02 20:22:58

⑴ C語言怎麼用遞歸法求階乘

n的階乘,就是從1開始乘到n,即1*2*3*...*(n-1)*n。
即n!=1*2*3*...*(n-1)*n。
而(n-1)!=1*2*3*...*(n-1)。
所以可以得出,n!=(n-1)!
*
n。
由這個概念,可以得出遞歸求階乘函數fact的演算法:
1
如果傳入參數為0或1,返回1;
2
對於任意的n,返回n*fact(n-1)。
代碼如下:
int fact(int n)
{
if(n == 0 || n == 1) return 1;
return n*(fact(n-1));
}

⑵ c璇璦鐨勬眰n鐨勯樁涔樼殑紼嬪簭浠g爜

鐢ㄩ掑綊娉曟眰N鐨勯樁涔

紼嬪簭璋冪敤鑷韜縐頒負閫掑綊錛 recursion錛.瀹冮氬父鎶婁竴涓澶у瀷澶嶆潅鐨勯棶棰樺眰灞傝漿鍖栦負涓涓涓庡師闂棰樼浉浼肩殑瑙勬ā杈冨皬鐨勯棶棰樻潵奼傝В.

閫掑綊鐨勮兘鍔涘湪浜庣敤鏈夐檺鐨勮鍙ユ潵瀹氫箟瀵硅薄鐨勬棤闄愰泦鍚堛

涓鑸鏉ヨ達紝閫掑綊闇瑕佹湁杈圭晫鏉′歡銆侀掑綊鍓嶈繘孌靛拰閫掑綊榪斿洖孌點傚綋杈圭晫鏉′歡涓嶆弧瓚蟲椂錛岄掑綊鍓嶈繘錛涘綋杈圭晫鏉′歡婊¤凍鏃訛紝閫掑綊榪斿洖銆

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

long factorial(int n)

{

if(n == 1)

return 1;

else

return n*factorial(n-1);

}

int main(int argc,char *argv[])

{

int n = 0;

if(argc != 2)

{

printf("input error,exit!! ");

return -1;

}

n = atoi(argv[1]);

printf("%d! = %ld ",n,factorial(n));

return 0;

}

涔犻樼ず渚

棰樼洰

棰樼洰鎻忚堪錛

杈撳叆涓涓姝f暣鏁癗錛岃緭鍑篘鐨勯樁涔樸

杈撳叆錛

姝f暣鏁癗(0<=N<=1000)

杈撳嚭錛

杈撳叆鍙鑳藉寘鎷澶氱粍鏁版嵁錛屽逛簬姣忎竴緇勮緭鍏ユ暟鎹錛岃緭鍑篘鐨勯樁涔

鏍蜂緥杈撳叆錛

4

5

15

鏍蜂緥杈撳嚭錛

24

120

1307674368000

AC浠g爜

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX 3000

//瀛樺偍姣忔¢樁涔樿繍綆楃殑緇撴灉

int str[MAX];

void calculateFactorial(int n);

int main()

{

int n;

while (scanf("%d", &n) != EOF) {

if(n == 0) {

printf("1 ");

} else {

calculateFactorial(n);

}

}

return 0;

}

void calculateFactorial(int n)

{

int i, j, temp, c, len;

memset(str, 0, sizeof(str));

str[1] = 1;

for (i = 2, len = 1; i <= n; i ++) { //寰鐜涓2,3,..n鐩鎬箻

for (j = 1, c = 0; j <= len; j ++) { //str鏁扮粍浠h〃涓涓鏁幫紝妯℃嫙涓巌鐩鎬箻

temp = str[j] * i + c;

str[j] = temp % 10;

c = temp / 10;

}

while(c > 0)

{

str[j ++] = c % 10;

c /= 10;

}

len = j - 1;

}

for (i = len; i >= 1; i --) {

printf("%d", str[i]);

}

printf(" ");

}

/**************************************************************

Problem: 1076

User: wangzhengyi

Language: C

Result: Accepted

Time:2150 ms

Memory:916 kb

⑶ C語言中如何編程計算階乘

常見的有兩種:

遞歸版本

intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}

還有一種是循環版:

intans=1;
for(inti=1;i<=n;i++)ans*=i;

測試方法:

#include<stdio.h>

intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}

intmain(){
intn;
while(scanf("%d",&n)!=EOF){
intans=1;
for(inti=1;i<=n;i++)ans*=i;
printf("%d%d ",ans,Fac(n));
}
return0;
}

有個值得注意的地方內:階乘時,數增大容的很快,在n達到13時就會超過int的范圍,此時可以用long long或是 __int64來存儲更高精度的值,如果還想存儲更高位的,需要用數組來模擬大數相乘。

閱讀全文

與階乘編程用遞歸怎麼表示c語言相關的資料

熱點內容
國外網站的店怎麼看呢 瀏覽:56
ps入門必備文件 瀏覽:348
以前的相親網站怎麼沒有了 瀏覽:15
蘋果6耳機聽歌有滋滋聲 瀏覽:768
怎麼徹底刪除linux文件 瀏覽:379
編程中字體的顏色是什麼意思 瀏覽:534
網站關鍵詞多少個字元 瀏覽:917
匯川am系列用什麼編程 瀏覽:41
筆記本win10我的電腦在哪裡打開攝像頭 瀏覽:827
醫院單位基本工資去哪個app查詢 瀏覽:18
css源碼應該用什麼文件 瀏覽:915
編程ts是什麼意思呢 瀏覽:509
c盤cad佔用空間的文件 瀏覽:89
不銹鋼大小頭模具如何編程 瀏覽:972
什麼格式的配置文件比較主流 瀏覽:984
增加目錄word 瀏覽:5
提取不相鄰兩列數據如何做圖表 瀏覽:45
r9s支持的網路制式 瀏覽:633
什麼是提交事務的編程 瀏覽:237
win10打字卡住 瀏覽:774

友情鏈接