有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?java递归
时间: 2024-05-03 12:22:12 浏览: 8
以下是Java递归代码实现:
```
public class Watermelon {
public static int daysToSellOut(int n) {
if (n == 1) {
return 1;
} else {
return 1 + daysToSellOut((n + 1) / 2);
}
}
public static void main(String[] args) {
int n = 1020;
int days = daysToSellOut(n);
System.out.println("It will take " + days + " days to sell out " + n + " watermelons.");
}
}
```
解释:
递归函数 `daysToSellOut` 的参数 `n` 表示剩余的西瓜数。
如果只剩下 1 个西瓜,那么就可以在第一天卖完,返回 1。
否则,第一天卖出的数量为 `(n + 1) / 2 + 2`,因为要卖出一半多两个。剩下的西瓜数量为 `(n + 1) / 2`,因为要保留一半多两个。
然后递归调用 `daysToSellOut` 函数,参数为剩下的西瓜数量。最终返回的是天数加 1,因为需要算上第一天。
在 `main` 函数中,设置初始西瓜数量为 1020,调用 `daysToSellOut` 函数,输出结果。