递归判断数组是否有序的函数始终返回false,求排查解决
问题分析与修复方案
嘿,我一眼就揪出你代码里的问题了——你的递归调用根本没把结果返回出去!不管前面的比较逻辑对不对,函数最后都会执行return false;,这就是为啥所有数组都返回false的核心原因。
咱们拆解下原代码的执行逻辑:
- 递归终止条件
s+1 == n返回true,这部分是没问题的 - 当
a[s] <= a[s+1]成立时,你调用了递归函数sorted(a,s+1,n),但这个调用的结果被直接丢弃了,函数会继续走到最后一行的return false;,直接返回false - 完全没处理
a[s] > a[s+1]的情况,这时候本该直接返回false终止递归的
下面是修正后的代码:
boolean sorted(int[] a , int s , int n) { if(s+1 == n) return true ; if(a[s] <= a[s+1]) { // 把递归调用的结果返回,让后续判断结果能逐层传递回来 return sorted(a,s+1,n); } // 当前元素大于下一个,直接返回false return false ; }
修改的关键点很清晰:
- 当当前元素和下一个元素符合有序条件时,返回递归调用的结果,这样后续的判断结果就能一层层传递回最初的调用
- 当当前元素大于下一个元素时,直接返回false,终止递归并返回错误结果
现在测试下:调用sorted(new int[]{1,2,3},0,3)会返回true,调用sorted(new int[]{3,2,1},0,3)会返回false,完全符合预期啦!
内容的提问来源于stack exchange,提问作者akisonlyforu
相关产品推荐
相关产品推荐

