(递归实现)喝汽水:1瓶汽水1元,2个空瓶可以换一瓶汽水, 给20元,可以喝多少汽水。

核心

  • 首先明确20元可以喝多少瓶水(最后剩一瓶的时候不给老板借空瓶)
  • 上图在这里插入图片描述
  • 答案是 39 瓶

具体实现

  • 首先用 while 循环实现计算
int Num2(int num){
	int flag = num;//flag代表空瓶数,第一次有num个空瓶
	while (flag > 1){//终止条件,只剩一个空瓶,不能再换了
		num = num + flag / 2;//累加
		flag = flag / 2 + flag % 2;//记录下一次空瓶的个数,包括奇数的情况
	}
	return num;
}
  • 递归
int Num(int num){
	static int more = 0;
	if (more == 1 && num == 1){//终止条件是more 和 num 都为 1
		return 1;
	}
	if (more == 1){//如果是奇数 ,上次有一个空瓶没有兑换, 则需要在下一步减 1,不然会多加一瓶水
		num = num - 1;
	}
	more = num % 2;//如果此次的水是奇数,则在下一个循环 num 需要减掉 1
	return num + Num(num / 2 + more);//加的 more 是没有兑换的空瓶 如果为 1,则需要在下一层减 1
}
int main() {
	int ret = Num(20);
	//int ret = Num2(20);
	printf("%d\n", ret);
	return 0;
}
  • 上图:

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值