好像麻煩 沒什么作用?。‰A乘我有for循環(huán)照樣實現(xiàn)又簡單!
為巍山等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及巍山網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為做網(wǎng)站、成都網(wǎng)站建設(shè)、巍山網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
int f(int n)//實現(xiàn)階乘參數(shù)
{
int tem = 1;
for(;n0;n--)
{
tem*=n;
}
return tem;
}
我解釋下具體執(zhí)行過程:
printf("%d!=%ld\n",num,mul(num));
這里調(diào)用了mul(num)方法,第一個值是5,進(jìn)入方法后,
if(51) x=5*mul(5-1);
這里又調(diào)用了一次方法,
mul(5-1)
這里就是遞歸調(diào)用了,需要把4的值帶入方法又執(zhí)行一次,
變成:if(41) x=4*mul(4-1);
這里又調(diào)用了一次方法,
mul(4-1)
依次類推為:if(31) x=3*mul(3-1);
if(21) x=2*mul(2-1);
這里看懂了沒,遞歸函數(shù)關(guān)鍵字在“遞”和“歸”,相當(dāng)于循環(huán),一直到條件不滿足時在“歸”,一步步return直到第一個調(diào)用的mul方法。在return主函數(shù)。
也就是從最后一次調(diào)用
mul(2-1)時
n的值為1了,執(zhí)行else語句,結(jié)束“遞”方法操作,return語句,返回X=1,那么接下來變?yōu)?/p>
if(21) x=2*1,返回X=2,接下來變?yōu)椋?/p>
if(31) x=3*2,返回X=6,接下來變?yōu)椋?/p>
if(41) x=4*6,返回X=24,接下來變?yōu)椋?/p>
if(51) x=5*24,返回X=120 結(jié)束遞歸調(diào)用。
希望你能看懂,還有問題在補(bǔ)充吧!
遞歸函數(shù)通常用來解決結(jié)構(gòu)自相似的問題。所謂結(jié)構(gòu)自相似,是指構(gòu)成原問題的子問題與原問題在結(jié)構(gòu)上相似,可以用類似的方法解決。具體地,整個問題的解決,可以分為兩部分:第一部分是一些特殊情況,有直接的解法;第二部分與原問題相似,但比原問題的規(guī)模小。實際上,遞歸是把一個不能或不好解決的大問題轉(zhuǎn)化為一個或幾個小問題,再把這些小問題進(jìn)一步分解成更小的問題,直至每個小問題都可以直接解決。因此,遞歸有兩個基本要素:
(1)邊界條件:確定遞歸到何時終止,也稱為遞歸出口。
(2)遞歸模式:大問題是如何分解為小問題的,也稱為遞歸體。遞歸函數(shù)只有具備了這兩個要素,才能在有限次計算后得出結(jié)果。
遞歸就是某個函數(shù)直接或間接地調(diào)用了自身,這種調(diào)用方式叫做遞歸調(diào)用。說白了,還是函數(shù)調(diào)用。既然是函數(shù)調(diào)用,那么就有一個雷打不動的原則:所有被調(diào)用的函數(shù)都將創(chuàng)建一個副本,各自為調(diào)用者服務(wù),而不受其他函數(shù)的影響。