Java递归查找数组元素最后索引 疑惑代码是否返回首个索引求推演
问题解答
疑问判定
如果你的递归逻辑确实是从数组末尾向前遍历,找到目标值就直接返回当前索引,那么不会返回元素第一次出现的索引,得到的就是最后一次出现的索引。只有从数组头部向后遍历、找到即返回的递归逻辑才会返回第一次出现的索引。
Dry Run 示例
我们用测试用例数组 = [2,5,3,5,1],查找目标值=5来演示从后向前遍历的递归执行过程:
- 初始调用:查找索引为4,对应元素是1,与目标值5不匹配,递归调用索引3
- 递归调用1:查找索引为3,对应元素是5,与目标值匹配,直接返回3
- 最终返回结果3,就是目标值最后一次出现的索引,符合预期
纯递归实现方案
public class LastIndexFinder { // 对外暴露的入口方法 public static int findLastIndex(int[] inputArray, int target) { // 空数组边界处理 if (inputArray == null || inputArray.length == 0) { return -1; } // 从数组最后一位开始递归查找 return recursiveFind(inputArray, target, inputArray.length - 1); } // 递归核心逻辑 private static int recursiveFind(int[] inputArray, int target, int currentPos) { // 遍历完全部元素未找到,返回-1 if (currentPos < 0) { return -1; } // 当前位置匹配目标,直接返回当前索引 if (inputArray[currentPos] == target) { return currentPos; } // 不匹配则向前递归查找 return recursiveFind(inputArray, target, currentPos - 1); } // 测试用例 public static void main(String[] args) { int[] testArr = {2,5,3,5,1}; System.out.println(findLastIndex(testArr, 5)); // 输出3 System.out.println(findLastIndex(testArr, 9)); // 输出-1 } }
内容的提问来源于stack exchange,提问作者Amreet Kurmi
相关产品推荐
相关产品推荐

