首先是要這個(gè)求解的問題,適合用遞歸方法來進(jìn)行求解。找到這個(gè)遞歸解法結(jié)束遞歸的條件。遞歸函數(shù)中,首先第一個(gè)語句就是如果滿足遞歸條件,就直接返回確定的值,否則返回使用遞歸方法求解的表達(dá)式。
我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、洪江ssl等。為千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的洪江網(wǎng)站制作公司
我解釋下具體執(zhí)行過程:
printf("%d!=%ld\n",num,mul(num));
這里調(diào)用了mul(num)方法,第一個(gè)值是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),一直到條件不滿足時(shí)在“歸”,一步步return直到第一個(gè)調(diào)用的mul方法。在return主函數(shù)。
也就是從最后一次調(diào)用
mul(2-1)時(shí)
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ǔ)充吧!
第一級遞歸:n=483,i=n/10=48≠0
注意此時(shí)先遞歸調(diào)用convert(48),待遞歸返回再輸出當(dāng)前n的個(gè)位數(shù)字n%10=3
第二級遞歸:n=48,i=n/10=4≠0
此時(shí)繼續(xù)遞歸調(diào)用convert(4),待遞歸返回再輸出當(dāng)前n的個(gè)位數(shù)字n%10=8
第三級遞歸:n=4,i=n/10=0
此時(shí)遞歸終止,先輸出當(dāng)前n的個(gè)位數(shù)字n%10=4
再返回上一級遞歸輸出8,最后返回第一級遞歸輸出3
因此最終輸出為:4 8 3
遞歸函數(shù)有三點(diǎn)要求:
1,遞歸的終止點(diǎn),即遞歸函數(shù)的出口
2,不斷的遞歸調(diào)用自身
3,遞歸函數(shù)主體內(nèi)容,即遞歸函數(shù)需要做的事情
ps:3一般可以放在2的前面或者后面,一般1放最前面。另外,2和3可以根據(jù)不同的需要合并,比如,有時(shí)候遞歸函數(shù)的主體就是返回調(diào)用下層函數(shù)所得到的結(jié)果。
具體例子如下:
void?fun(int?n)
{
if(n=0)?return;???//1?這是遞歸的終點(diǎn),即出口
fun(n-1);????????//2、遞歸函數(shù)自身的調(diào)用
coutnendl;?????//3?遞歸函數(shù)的主體內(nèi)容
}
2,3合并的情況
int?fun(int?n)
{
if(n=0)?return?0;
return?fun(n-1)+fun(n-2);??//2?3合并
}