You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归判断数组是否有序的函数始终返回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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:22:57