遞歸函數(shù)(二)
我們對(duì)上一小節(jié)中求5的階乘這個(gè)例子進(jìn)行一下剖析,看一看它的運(yùn)算過(guò)程:

程序在計(jì)算5的階乘的時(shí)候,先執(zhí)行遞推,當(dāng)n=1或者n=0的時(shí)候返回1,再回推將計(jì)算并返回。由此可以看出遞歸函數(shù)必須有結(jié)束條件。
遞歸函數(shù)特點(diǎn):
- 每一級(jí)函數(shù)調(diào)用時(shí)都有自己的變量,但是函數(shù)代碼并不會(huì)得到復(fù)制,如計(jì)算5的階乘時(shí)每遞推一次變量都不同;
- 每次調(diào)用都會(huì)有一次返回,如計(jì)算5的階乘時(shí)每遞推一次都返回進(jìn)行下一次;
- 遞歸函數(shù)中,位于遞歸調(diào)用前的語(yǔ)句和各級(jí)被調(diào)用函數(shù)具有相同的執(zhí)行順序;
- 遞歸函數(shù)中,位于遞歸調(diào)用后的語(yǔ)句的執(zhí)行順序和各個(gè)被調(diào)用函數(shù)的順序相反;
- 遞歸函數(shù)中必須有終止語(yǔ)句。
一句話總結(jié)遞歸:自我調(diào)用且有完成狀態(tài)。
任務(wù)
猴子第一天摘下N個(gè)桃子,當(dāng)時(shí)就吃了一半,還不過(guò)癮,就又多吃了一個(gè)。第二天又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天都吃前一天剩下的一半零一個(gè)。到第10天在想吃的時(shí)候就剩一個(gè)桃子了,問(wèn)第一天共摘下來(lái)多少個(gè)桃子?并反向打印每天所剩桃子數(shù)。
在代碼編輯器中:
第7,11,12行根據(jù)注釋提示填寫(xiě)代碼
運(yùn)行結(jié)果為:

- ?不會(huì)了怎么辦
-
1、遞歸函數(shù)中是否出現(xiàn)了調(diào)用自身的語(yǔ)句
2、遞歸函數(shù)中是否出現(xiàn)了結(jié)束遞歸的語(yǔ)句
3、參考代碼

#include <stdio.h>
int getPeachNumber(n)
{
int num; //定義所剩桃子數(shù)
if(n==10)
{
? //遞歸結(jié)束條件
}
else
{
num = ?; //這里是不應(yīng)該用遞歸呢?
printf("第%d天所剩桃子%d個(gè)\n", ?, ?); //天數(shù),所剩桃子個(gè)數(shù)
}
return num;
}
int main()
{
int num = getPeachNumber(1);
printf("猴子第一天摘了:%d個(gè)桃子。\n", num);
return 0;
}
請(qǐng)驗(yàn)證,完成請(qǐng)求
由于請(qǐng)求次數(shù)過(guò)多,請(qǐng)先驗(yàn)證,完成再次請(qǐng)求