问题:给你一个数组 arr,和一个整数 aim。如果可以任意选择 arr 中的数字,能不能累加得到 aim,返回 true 或者 false。
一、递归版本
【分析】:每个位置 i 有 要和不要 两种选择;叶节点会看自己这里的结果是不是 aim,从而向父结点返回 true 或 false,父结点比较子节点的结果,有一个为 true 就一直返回 true,否则返回 false。
- 分析:
如上图所示:数组 arr = {3, 2, 5} ,aim = 7:
f(0, 0):代表0位置处状态值为 0 的点;
f(2, 5):代表2位置处状态值为 5 的点。
只要有叶节点的值等于 aim 的值,则会返回 true。
- 递归版本代码实现
public class SumToAimWithRecursion {
public static boolean isSumToAim(int[] arr, int aim){
if(arr == null || arr.length < 1){