遞歸是一個(gè)非常重要的概念,但是并不是很好理解。
最常用的遞歸案例,就是求乘法的階乘,例如求n!的值。
n=1
n=1*2
n=1*2*3
n=1*2*3*4
...
這個(gè)乘法問題,是在前一個(gè)乘法的基礎(chǔ)上,再做乘法運(yùn)算,也就是
fun(n)=fun(n-1) * n
這就是遞歸的公式,我們只要確定了fun()的實(shí)現(xiàn),就能夠求出所有的值。
#include
int fun(int n){
if(n == 1) return 1;
return fun(n-1) * n;
}
int main(){
printf("%d\\n", fun(5));
return 0;
}
在這個(gè)案例中,設(shè)n=5,他的執(zhí)行過程如圖所示。
由外到里,再由里到外。
在設(shè)計(jì)遞歸算法的時(shí)候,需要注意,必須有出口條件,本案例中,階乘的出口條件是n=1的時(shí)候,乘積為1
再看一個(gè)案例,例如,要求一個(gè)復(fù)雜的多項(xiàng)式
F(1)=1,F(xiàn)(2)=1
F(n)=F(n-1)+F(n-2) n>2 求F(6) = ?
根據(jù)數(shù)學(xué)方程,實(shí)現(xiàn)起來也非常簡單
#include
int f(int n){
if(n == 1) return 1;
if(n == 2) return 1;
return f(n-1) + f(n-2);
}
int main(){
printf("%d\\n", f(6));
return 0;
}
執(zhí)行過程如圖所示。
審核編輯:劉清
-
矩陣
+關(guān)注
關(guān)注
0文章
425瀏覽量
34644 -
printf函數(shù)
+關(guān)注
關(guān)注
0文章
31瀏覽量
5921
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
數(shù)據(jù)傳輸指令有何作用?數(shù)據(jù)傳輸指令有哪幾種
矩陣按鍵的原理是什么?有哪幾種掃描方式呢
什么是步進(jìn)電機(jī)?步進(jìn)電機(jī)分哪幾種?
![什么是步進(jìn)電機(jī)?步進(jìn)電機(jī)分<b class='flag-5'>哪幾種</b>?](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論