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