java递归 有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?
时间: 2024-05-12 20:20:24 浏览: 11
以下是Java递归代码:
```java
public class SellWatermelon {
public static void main(String[] args) {
int num = 1020; // 初始西瓜数
int days = sellWatermelon(num); // 调用递归函数
System.out.println("需要" + days + "天才能卖完西瓜。");
}
public static int sellWatermelon(int num) {
if (num <= 0) { // 如果西瓜数小于等于0,则已经卖完了,返回0天
return 0;
} else { // 否则继续递归
return sellWatermelon(num / 2 + 2) + 1;
}
}
}
```
输出结果为:需要10天才能卖完西瓜。
相关问题
有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?java递归
以下是Java递归代码:
```
public static int sellWatermelon(int num, int day) {
if (num <= 0) { // 如果卖完了,返回卖完的天数
return day;
} else {
int sellNum = num / 2 + 2; // 第一天卖的数量
return sellWatermelon(num - sellNum, day + 1); // 递归,卖完num-sellNum个西瓜,天数加1
}
}
// 调用方法,传入1020个西瓜和第一天的天数
int days = sellWatermelon(1020, 1);
```
解释一下:
递归函数sellWatermelon有两个参数:num表示还剩下的西瓜数量,day表示当前是第几天。如果num小于等于0,说明卖完了,这时候就返回卖完的天数(即当前的day值);否则,计算出第一天要卖的数量sellNum,然后递归调用sellWatermelon函数,传入剩下的西瓜数量num-sellNum和天数day+1。
在调用函数时,传入1020个西瓜和第一天的天数1,得到卖完需要的天数days。
JAVA递归合并两个有序的单链表,合并以后依然有序
可以使用递归的方式来合并两个有序的单链表,具体实现过程如下:
```java
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
// 递归结束条件
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}
// 比较两个链表头结点的大小,选择较小的结点作为新链表的头结点
if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
} else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
}
```
其中,`ListNode` 表示单链表的结点,包含一个整数值 `val` 和一个指向下一个结点的指针 `next`。在递归过程中,如果 `l1` 和 `l2` 中有任意一个为空,则直接返回另一个链表;否则,比较两个链表的头结点,将较小的那个结点作为新链表的头结点,然后递归处理剩下的结点,直到两个链表都为空,返回新链表的头结点即可。