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

如何用Java递归实现分数求和?请协助排查现有代码问题

我帮你检查了代码,发现几个关键问题,咱们一步步修正,实现你想要的分数求和功能:

问题分析
  1. 递归计算逻辑错误:你的getSum方法里,curStep = 1 / (i + 1.0)这行完全搞反了当前项的计算。比如当i=3时,你应该加的是1/3,但这行代码算出来的是1/4,直接导致求和结果偏差。
  2. main方法冗余循环:你现在的for循环会从1到n每次都调用递归并打印,这会输出每一步的累加结果,但你的需求是输入n后只输出最终的总和,这个循环完全没必要。
  3. 边界条件可以简化:虽然你的边界判断没问题,但正常输入都是正整数,所以可以简化递归的终止条件。
修正后的完整代码
import java.util.Scanner;

public class FractionSum {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入正整数n:");
        int n = scanner.nextInt();
        
        // 调用递归函数获取总和
        double totalSum = getSum(n);
        // 格式化输出结果,保留8位小数
        System.out.printf("求和结果为:%.8f%n", totalSum);
        
        // 可选:输出对应的求和表达式(比如输入3时输出1/1+1/2+1/3)
        StringBuilder expression = new StringBuilder();
        for (int i = 1; i <= n; i++) {
            expression.append("1/").append(i);
            if (i < n) {
                expression.append("+");
            }
        }
        System.out.println("对应的表达式:" + expression);
        
        scanner.close();
    }

    public static double getSum(int n) {
        // 递归终止条件:当n=1时,返回1/1的结果
        if (n == 1) {
            return 1.0;
        }
        // 递归逻辑:当前项1/n 加上前n-1项的求和结果
        return 1.0 / n + getSum(n - 1);
    }
}
代码说明
  • 递归函数getSum现在逻辑清晰:每次递归计算当前项1.0/n,再加上前n-1项的和,完全符合1/1+1/2+...+1/n的求和逻辑。
  • main方法去掉了多余的循环,只调用一次递归就能得到最终结果,还额外添加了表达式输出的代码,完美匹配你给出的示例需求。
  • 用printf格式化输出结果,保留8位小数,和你示例里的1.83333333一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:33:59