求大神為我講一下遞歸函數(shù)!?。。。。。?/h1>
6 回答
TA貢獻34條經(jīng)驗 獲得超34個贊
? ? 1.遞歸函數(shù)是自身調(diào)用自身的函數(shù);
????2.每一個遞歸函數(shù)都必須有遞歸出口,且一般帶有參數(shù);
????3.遞歸算法代碼簡潔,但復雜度高,對計算機資源的占用很大,能不用遞歸盡量不用遞歸。
????下面給出一個利用遞歸算法求解的簡單例子,程序調(diào)試運行過。
????求解問題:求10以內(nèi)任意正整數(shù)的階乘。
? ? 代碼:
#include?<stdio.h>
int?f(int?n)
{
????if(?n==1?)?return?1;????//遞歸出口,當n=1時,返回1
????else?return?n?*?f(n-1);?//調(diào)用函數(shù)f本身,傳入n-1,將求n的階乘轉化為求n乘以n-1的階乘
}
int?main()
{
??int?n?=?6;
??int?sum?=?f(n);
??printf("sum?=??%d",sum);
}? ? 輸出結果:
sum?=??720
TA貢獻1017條經(jīng)驗 獲得超1032個贊
遞歸函數(shù)的使用分為兩個部分,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í)行的時候,第一次i==5 return(2+getAge(4))你會發(fā)現(xiàn)getAge(4)還是調(diào)用該函數(shù),下一步得到getAge(4)的函數(shù)返回值,這樣一直到i==1時getAge函數(shù)有一個具體的返回值,而這個得到結束條件函數(shù)返回值的過程稱為“遞歸”,然后就是計算具體的最終函數(shù)返回值,這個過程稱為“回溯”;
如上例: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貢獻4條經(jīng)驗 獲得超1個贊
比如斐波那契函數(shù)
int?Factorial(int?n)
{
if(n==0||n==1)
return?1;
else
return?n?*?Factorial(n-1)
}
意思就是調(diào)用Factorial(n)這個函數(shù),如果n==0或n==1,直接返回1,否則返回n*Factorial(n-1),此時n*不變,繼續(xù)調(diào)用Factorial(n-1),一直這樣下去知道n==0或1為止,就是n*(n-1)*(n-2)。。。*1.
TA貢獻2條經(jīng)驗 獲得超0個贊
遞歸函數(shù),簡單來說,就類似于咱們高中學習的證明方法歸納法,用歸納法來說明一個函數(shù),然后再引用這個函數(shù),就這樣簡單,喵
- 6 回答
- 3 關注
- 2485 瀏覽
添加回答
舉報
