6 回答

TA貢獻(xiàn)34條經(jīng)驗(yàn) 獲得超34個(gè)贊
? ? 1.遞歸函數(shù)是自身調(diào)用自身的函數(shù);
????2.每一個(gè)遞歸函數(shù)都必須有遞歸出口,且一般帶有參數(shù);
????3.遞歸算法代碼簡(jiǎn)潔,但復(fù)雜度高,對(duì)計(jì)算機(jī)資源的占用很大,能不用遞歸盡量不用遞歸。
????下面給出一個(gè)利用遞歸算法求解的簡(jiǎn)單例子,程序調(diào)試運(yùn)行過。
????求解問題:求10以內(nèi)任意正整數(shù)的階乘。
? ? 代碼:
#include?<stdio.h> int?f(int?n) { ????if(?n==1?)?return?1;????//遞歸出口,當(dāng)n=1時(shí),返回1 ????else?return?n?*?f(n-1);?//調(diào)用函數(shù)f本身,傳入n-1,將求n的階乘轉(zhuǎn)化為求n乘以n-1的階乘 } int?main() { ??int?n?=?6; ??int?sum?=?f(n); ??printf("sum?=??%d",sum); }
? ? 輸出結(jié)果:
sum?=??720

TA貢獻(xiàn)1017條經(jīng)驗(yàn) 獲得超1032個(gè)贊
遞歸函數(shù)的使用分為兩個(gè)部分,1)遞歸;2)回溯;
int getAge(int i){
? ?if(i==1)
????return 10;
????else?
????return (2+getAge(i-1));
}
如上例如果主函數(shù)調(diào)用getAge函數(shù)int age=getAge(5);那么執(zhí)行的時(shí)候,第一次i==5 return(2+getAge(4))你會(huì)發(fā)現(xiàn)getAge(4)還是調(diào)用該函數(shù),下一步得到getAge(4)的函數(shù)返回值,這樣一直到i==1時(shí)getAge函數(shù)有一個(gè)具體的返回值,而這個(gè)得到結(jié)束條件函數(shù)返回值的過程稱為“遞歸”,然后就是計(jì)算具體的最終函數(shù)返回值,這個(gè)過程稱為“回溯”;
如上例:return(2+getAge(4))——>return (2+2+getAge(3))——>return(2+2+2+getAge(2))——>return (2+2+2+2+getAge(1))——>return (2+2+2+2+10)
最后函數(shù)返回18

TA貢獻(xiàn)4條經(jīng)驗(yàn) 獲得超1個(gè)贊
比如斐波那契函數(shù)
int?Factorial(int?n)
{
if(n==0||n==1)
return?1;
else
return?n?*?Factorial(n-1)
}
意思就是調(diào)用Factorial(n)這個(gè)函數(shù),如果n==0或n==1,直接返回1,否則返回n*Factorial(n-1),此時(shí)n*不變,繼續(xù)調(diào)用Factorial(n-1),一直這樣下去知道n==0或1為止,就是n*(n-1)*(n-2)。。。*1.

TA貢獻(xiàn)2條經(jīng)驗(yàn) 獲得超0個(gè)贊
遞歸函數(shù),簡(jiǎn)單來說,就類似于咱們高中學(xué)習(xí)的證明方法歸納法,用歸納法來說明一個(gè)函數(shù),然后再引用這個(gè)函數(shù),就這樣簡(jiǎn)單,喵
- 6 回答
- 3 關(guān)注
- 2441 瀏覽
添加回答
舉報(bào)