#include <stdio.h>int lzhzuibang(int l){ int sum; if(l==1) { return 10; } else { sum = (lzhzuibang(l-1))+2; printf("第%d個人%d歲\n",l,sum); return sum; } }int main() { int y = lzhzuibang(5); printf("第五個人的年齡是%d歲\n",y); getchar(); }還是不太懂遞歸函數(shù)大神幫忙解釋一下
1 回答

Atlas_Wu
TA貢獻3條經(jīng)驗 獲得超3個贊
遞歸就是函數(shù)自己調(diào)用自己??梢园堰f歸看成是一個盒子,先放進去的數(shù)據(jù)在下面,要后取出來的。比如你這個程序中 l 的值為5, 求lzhzuibang(5)。
lzhzuibang(5)=lzhzuibang(4)+2
lzhzuibang(4)=lzhzuibang(3)+2
lzhzuibang(3)=lzhzuibang(2)+2
lzhzuibang(2)=lzhuzuibang(1)+2
lzhzuibang(1)=10,
lzhzuibang(1)是最后放進去的,所以最先取出來,并且值返回都上一步遞歸,這樣就依次算出上面的值,最終得到lzhuzuibang(5)的值。
要注意的是,在遞歸結束之前,也就是lzhzuibang(5)求出之前,lzhzuibang(1)到lzhzuibang(4)都是作為臨時變量存放于內(nèi)存當中等待遞歸的返回值,因此會占用一定的內(nèi)存空間。如果遞歸的次數(shù)很大,比如你把5改成50000或更大,那么就會出現(xiàn)內(nèi)存的溢出。
你的問題“sum=(lzhzuibang(l-1))+2里的l-1什么時候是加號什么時候是減號”,我不是很明白什么意思?
- 1 回答
- 0 關注
- 1653 瀏覽
添加回答
舉報
0/150
提交
取消