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

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

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

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