递归算法四:猴子摘桃
问题描述
猴子第一天采摘了一些桃子,第二天吃了第一天的一半多一个,第三天吃了第二天的一半多一个…直到第十天就剩下一个。问:猴子第一天摘了多少桃子?
分析
边界条件
第十天剩一个桃子,即peachesNumber(10) = 1
递归条件
peachesNumber(day) = peachesNumber(day-1)/2 - 1;
转化一下
peachesNumber(day) = ( peachesNumber(day+1) + 1 ) * 2
代码
#include <iostream>
using namespace std;
int func(int day){
if(day==10)
return 1; //终止条件很重要
else
return (func(day+1)+1)*2; //找到依赖关系很重要
}
int main(){
cout<<"第一天有%d个桃子!"<<func(1)<<endl;
return 0;
}