(递归实现)喝汽水: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;
}
  • 上图:

在这里插入图片描述

发布了60 篇原创文章 · 获赞 5 · 访问量 2652

猜你喜欢

转载自blog.csdn.net/qq_44905386/article/details/99695203