问题:商店促销饮料,三个空瓶可以换取一瓶,现在有n个人,一共需要购买多少瓶?
思想:一共n个人,就先买n瓶,买n瓶可以获得最后能喝多少(result)瓶;如果result>n,则继续计算买n-1瓶最后能喝多少瓶,…一直计算到result < n,这时候假如是购买a瓶的时候,则购买a+1瓶才够n个人喝;
分两步实现:
第一步:递归出买b瓶最后能喝多少瓶(result);
第二步:判断第一步计算的result与总人数(n)的关系
@property(assign, nonatomic) NSInteger result;
#pragma 一共N个人,返回需要购买的瓶数
-(NSInteger)personCount:(NSInteger)personCount{
//一共N个人,返回需要购买的瓶数
for (NSInteger i = personCount; i > 0; i --) {
self.result = i;
[self buyCount:self.result];
if (self.result < personCount) {
self.result = i + 1;
[self buyCount:self.result];
personCount = i + 1;
return i + 1;
}
}
return personCount;
}
#pragma 购买n瓶,返回最后能喝多少瓶
-(NSInteger)buyCount:(NSInteger)buyCount{
//购买n瓶,返回最后能喝多少瓶
NSInteger b = buyCount / self.result;
NSInteger c = buyCount % result;
if (b > result) {
self.result += b;
[self buyCount:b + c];
}
self.result += b;
return self.result;
}