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

Java递归实现Fraction数组元素批量乘法及存在性检查

递归实现Fraction数组的检查与批量乘法操作

最近在啃Java递归的知识点,为了加深理解自己设计了个小练习:检查一个Fraction数组里是否存在1/3,如果存在的话,就把数组里所有Fraction元素都和2/1相乘。

循环版本实现

最开始我用for循环快速实现了这个功能,逻辑很直观:遍历数组每个元素,逐个执行乘法操作:

public static Fraction[] mulWithFor(Fraction[] arr) {
    for (int i = 0; i<arr.length; i++) {
        arr[i] = arr[i].multiply(new Fraction(2,1));
    }
    return arr;
}

递归版本的探索与实现

不过用递归实现的时候就踩坑了,最初写的递归代码完全没法正常工作。后来在别人的帮助下,我把功能拆分成了三个方法来实现,分别负责主逻辑判断、递归检查元素存在性、递归执行批量乘法:

主方法(逻辑入口)

public static Fraction[] mulAus(Fraction[] arr) {
    if(contains(arr,arr.length-1,new Fraction(1,3))) {
        rekurMul(arr,0);
        return arr;
    }
    throw new IllegalArgumentException("1/3 does not exist in the Input-Array");
}

递归乘法方法

从索引0开始,逐个处理数组元素,直到遍历完整个数组就终止递归:

public static void rekurMul(Fraction[] arr, int i) {
    if(i == arr.length) {
        return ;
    }
    arr[i] = arr[i].multiply(new Fraction(2,1));
    rekurMul(arr,i+1);
}

递归检查元素存在方法

从数组末尾开始往前遍历检查,只要找到匹配的1/3就返回true,遍历完所有元素都没找到就返回false:

public static boolean contains(Fraction[] arr, int i, Fraction x) {
    if (i>= 0 && i < arr.length) {
        if (arr[i].equals(x)) {
            return true;}
        else {
            return contains(arr, i-1,x);
        }
    }
    return false;
}

配套的Fraction类定义

这里用到的Fraction类实现如下,包含了构造方法和分数化简逻辑:

private int numerator; // 分子
private int denominator; // 分母
public Fraction ( int num, int denom ) {
    if ( denom != 0 ) {
        if ( denom < 0 ) {
            numerator = -num;
            denominator = -denom;
        } else {
            numerator = num;
            denominator = denom;
        }
        reduce();
    } else {
        // error: division by zero
        throw new IllegalArgumentException();
    }
}
public Fraction() {
    numerator = 0;
    denominator = 1;
}
public Fraction( int num ) {
    numerator = num;
    denominator = 1;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:48:51