遞歸函數(shù)問(wèn)題
任務(wù)?猴子第一天摘下N個(gè)桃子,當(dāng)時(shí)就吃了一半,還不過(guò)癮,就又多吃了一個(gè)。第二天又將剩下的桃子吃掉一半,又多吃了一個(gè)。以后每天都吃前一天剩下的一半零一個(gè)。到第10天在想吃的時(shí)候就剩一個(gè)桃子了,問(wèn)第一天共摘下來(lái)多少個(gè)桃子?并反向打印每天所剩桃子數(shù)。
正確代碼
#include <stdio.h>
int getPeachNumber(int n)
{
? ? int num; ? ?//定義所剩桃子數(shù)
? ? if(n==10)
? ? {
? ? ? ?return 1; ?//遞歸結(jié)束條件
? ? }?
? ? else
? ? {
? ? ? ? num = getPeachNumber(n+1)*2+1; ? //這里是不應(yīng)該用遞歸呢?
? ? ? ? printf("第%d天所剩桃子%d個(gè)\n", n, num); //天數(shù),所剩桃子個(gè)數(shù)
? ? }
? ? return num;
}
int main()
{
? ? int num = getPeachNumber(1);
? ? printf("猴子第一天摘了:%d個(gè)桃子。\n", num);
? ? return 0;
}
num = (getPeachNumber(n+1)+1)*2?
我看不懂這段代碼 既然猴子每天吃一半多一個(gè),不應(yīng)該是 ?num = getPeachNumber(n+1)*2+1嗎?
2016-11-04
假設(shè)前一天是x個(gè),那么第二天還有y=x/2-1個(gè),變換一下就可以得到x=2*(y+1)