java直接递归实现币值最大化问题:
时间: 2024-01-12 13:59:49 浏览: 26
假设有一排硬币,每个硬币有一个面值。现在需要从中选择一些硬币,使得它们的面值之和最大,但是不能选择相邻的硬币。请使用 Java 直接递归实现这个问题的解法。
思路:
- 定义递归函数 `maxValue(int[] coins, int index)`,表示从第 `index` 枚硬币开始往后选硬币,使得选出的硬币面值之和最大。
- 对于当前枚硬币,有两种选择:
- 不选当前硬币,那么面值之和就是 `maxValue(coins, index + 1)`。
- 选当前硬币,但是不能选相邻的硬币,所以面值之和就是 `coins[index] + maxValue(coins, index + 2)`。
- 递归结束条件是当 `index` 超过了硬币数组的长度时,面值之和就是 0。
- 最终的答案就是 `maxValue(coins, 0)`。
Java 代码实现:
public int maxValue(int[] coins, int index) {
if (index >= coins.length) {
return 0;
}
int choice1 = maxValue(coins, index + 1); // 不选当前硬币
int choice2 = coins[index] + maxValue(coins, index + 2); // 选当前硬币
return Math.max(choice1, choice2);
}
public int maxCoins(int[] coins) {
return maxValue(coins, 0);
}