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

为何这段Java程序会出现执行耗时过长的错误?

程序执行耗时过长(死循环)的原因及修复方案

你的代码存在死循环问题,这是导致程序执行耗时过长(实际是永远无法结束)的核心原因,具体分析如下:

问题根源

当输入的N为奇数(尤其是N=1)时,代码会陷入无限循环:

  • 以N=1为例,N%2!=0条件成立,执行N=(1+1)/2=1,循环条件N>=1始终满足,循环会反复执行,永远跳不出去。
  • 代码中第三个分支else if(N==1)完全无效,因为前面的else if(N%2!=0)已经覆盖了所有奇数场景(包括N=1),这个分支永远不会被触发。

修复方案

调整分支顺序,优先处理N=1的特殊情况,同时简化冗余逻辑,修正后的代码如下:

public static int meth(int N) {
    int count1 = 0;
    int count2 = 0;
    int tot = 0;
    while (N >= 1) {
        if (N == 1) {
            // 处理N=1的特殊情况,吃完后直接将N置为0,终止循环
            count2++;
            N = 0;
        } else if (N % 2 == 0) {
            N = N / 2;
            count1++;
        } else {
            // 处理其他奇数情况,确保N会逐步减小
            N = (N + 1) / 2;
            count2++;
        }
    }
    tot = count1 + count2;
    return tot;
}

public static void main(String[] args) {
    int i = meth(4);
    System.out.println(i); // 输出3,符合示例1要求
    int j = meth(1);
    System.out.println(j); // 输出1,正确处理边界场景
}

修复说明

  1. 优先判断N==1,处理后直接将N置为0,确保循环能正常终止;
  2. 移除了冗余的条件判断,让逻辑更清晰;
  3. 测试边界场景(如N=1、N=0)都能得到正确结果。

内容的提问来源于stack exchange,提问作者KunaRakeshKumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:55:25