十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
C語(yǔ)言中,i的階乘可以用遞歸方式來(lái)計(jì)算,也可以用非遞歸方式來(lái)計(jì)算。
南寧網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站開(kāi)發(fā)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)從2013年開(kāi)始到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
遞歸方式:
double?fun(int?i)
{
if(i2)
return?1;???//?0和1的階乘都是1
else?
return?i*fun(i-1);??//?i的階乘等于i乘以(i-1)的階乘
}
//?調(diào)用函數(shù)fun后,得到的就是i的階乘
非遞歸方式:
double?result=0;
int?ind,?i;
printf("輸入i的值:");
scanf("%d",?i);
for(ind=1;?ind=i;?ind++)??//?1*2*...*i得到i的階乘
result?=?result?*?ind;
//?執(zhí)行完該程序段后,就可以得到i的階乘
首先,這個(gè)叫做“階乘”而不是“階層”。
其次,return 1是因?yàn)?0! = 1,數(shù)學(xué)上就是這么定義的,這個(gè)和C語(yǔ)言無(wú)關(guān)。
遞歸有兩個(gè)階段,第一階段是反復(fù)地調(diào)用自身,直到觸發(fā)終止條件;第二階段是,逐層計(jì)算并返回調(diào)用結(jié)果。
就拿你這個(gè)例子來(lái)說(shuō),假設(shè)要計(jì)算4的階乘,首先是遞歸地調(diào)用自身:
4! = func(4), 此時(shí)n為4大于0,所以func(4) = 4 * func(4-1) = 4*func(3)
同樣地:
3! = func(3) = 3*func(3-1) = 3*func(2)
2! = func(2) = 2*func(2-1) = 2*func(1)
1! = func(1) = 1*func(1-1) = 1*func(0)
這時(shí)注意了,當(dāng)計(jì)算func(0)時(shí),n=0,觸發(fā)邊界條件,所以遞歸調(diào)用停止,return 1。
接下來(lái),就是以相反的順序,,逐層返回結(jié)果了:
0! = func(0) = 1
1! = func(1) = 1*func(0) = 1*1 = 1
2! = func(2) = 2*func(1) = 2*1 = 2
3! = func(3) = 3*func(2) = 3*2 = 6
4! = func(4) = 4*func(3) = 4*6 = 24
這樣就得到了最終的結(jié)果:24。
需要準(zhǔn)備的材料分別有:電腦、C語(yǔ)言編譯器。
1、首先,打開(kāi)C語(yǔ)言編譯器,新建一個(gè)初始.cpp文件,例如:test.cpp。
2、在test.cpp文件中,輸入C語(yǔ)言代碼:int fun(){return 1;}。
3、編譯器運(yùn)行test.cpp文件,此時(shí)成功調(diào)用fun()函數(shù)輸出了內(nèi)容。
函數(shù)是用戶與程序的接口,在定義一個(gè)函數(shù)前,首先要清楚以下三個(gè)問(wèn)題。1) 函數(shù)的功能實(shí)現(xiàn)及算法選擇。算法選擇會(huì)在后續(xù)文章詳細(xì)講解,本節(jié)重點(diǎn)關(guān)注函數(shù)的功能實(shí)現(xiàn)。一般選取能體現(xiàn)函數(shù)功能的函數(shù)名,且見(jiàn)名知意,如求和函數(shù)的函數(shù)名可取為 add,求最大值的函數(shù)名可取為 max,排序函數(shù)可取名為 sort 等。2) 需要用戶傳給該函數(shù)哪些參數(shù)、什么類型,即函數(shù)參數(shù)。3) 函數(shù)執(zhí)行完后返回給調(diào)用者的參數(shù)及類型,即函數(shù)返回值類型。 函教定義格式 函數(shù)定義的一般格式為: 返回類型 函數(shù)名 (類型參數(shù)1,類型參數(shù)2,…) {函數(shù)體 }也可以不含參數(shù),不含參數(shù)時(shí),參數(shù)表中可寫(xiě)關(guān)鍵字 void 或省略,為規(guī)范起見(jiàn),教程中對(duì)沒(méi)有參數(shù)的函數(shù),參數(shù)表中統(tǒng)一寫(xiě) void。例如: 類型 函數(shù)名 () {函數(shù)體 }等價(jià)于: 類型 函數(shù)名 (void) //建議的書(shū)寫(xiě)方式 {函數(shù)體 } 如果該函數(shù)沒(méi)有返回類型,則為 void 類型。例如: void add (int x,int y) {printf ("sum=%d\n", x+y); } 除了 void 類型外,在函數(shù)體中,均需要顯式使用 return 語(yǔ)句返回對(duì)應(yīng)的表達(dá)式的值。 函教返回值 函數(shù)的值是指調(diào)用函數(shù)結(jié)束時(shí),執(zhí)行函數(shù)體所得并返回給主調(diào)函數(shù)的值。 關(guān)于函數(shù)返回值說(shuō)明如下。1) 帶返回值的函數(shù),其值一般使用 return 語(yǔ)句返回給調(diào)用者。其格式為: return 表達(dá)式;或者 return (表達(dá)式);例如: int add (int a, int b) {return (a + b); //return 后為表達(dá)式 } 函數(shù)可以含一個(gè)或多個(gè) return 語(yǔ)句,但每次調(diào)用時(shí)只能執(zhí)行其中一個(gè) return 語(yǔ)句。例如,求整數(shù)絕對(duì)值的函數(shù): int f (int n) //含多個(gè)return語(yǔ)句,但每次調(diào)用只執(zhí)行一個(gè) {if (n = 0)return n;elsereturn -n; }