用递归判断数组中是否存在相邻元素能被10整除
问题分析与修复方案
你的代码存在三个核心问题:
- 逻辑判断完全错误:需求是两个相邻元素都能被10整除(即每个元素对10取余等于0),但你写的
arr[i] + arr[i - 1] % 10 == 0既不符合需求,还因运算优先级问题,实际计算的是arr[i] + (arr[i-1]%10)是否等于0,逻辑彻底偏差。 - 递归结果未传递:递归调用
divideByTen(arr, num - 1)后,你没有接收并处理它的返回值。如果前面的递归已经找到符合条件的相邻对,当前函数会直接忽略这个结果,继续执行后续判断,最终可能错误返回false。 - 边界逻辑有漏洞:递归过程中,若上层递归已返回true,当前层需要直接传递这个结果,而不是继续执行本地判断。
修复后的递归代码
public static boolean divideByTen(int arr[], int num) { int i = num - 1; if (i > 0) { // 先检查递归调用的结果,若前面已找到符合条件的对,直接返回true if (divideByTen(arr, num - 1)) { return true; } // 正确判断当前相邻的两个元素是否都能被10整除 if (arr[i] % 10 == 0 && arr[i - 1] % 10 == 0) { return true; } } return false; }
额外建议:迭代实现更直观
递归虽然可行,但对于这种线性遍历的需求,迭代实现更易读,还能避免数组过长时的栈溢出风险:
public static boolean divideByTen(int arr[]) { if (arr == null || arr.length < 2) { return false; } for (int i = 1; i < arr.length; i++) { if (arr[i] % 10 == 0 && arr[i-1] % 10 == 0) { return true; } } return false; }
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

