【问题标题】:improve recursion for calculating remainder改进计算余数的递归
【发布时间】:2020-02-18 05:05:11
【问题描述】:

我必须编写一个代码来使用某种方式计算余数。我知道有更好的方法可以做到这一点,但我必须这样做。

if (rem(x - 1, y) + 1 == y) 正在打额外的电话。因为它每次都会在到达最后一次返回之前进入那里,但这对我的算法来说是重要的一步。我想知道是否有任何方法可以避免它。

另外,我知道我必须检查if y == 0; 我现在只是想提高性能。

谢谢

int rem(int x, int y) 
{
    if (x == 0) 
    {
        return 0;
    }
    if (rem(x - 1, y) + 1 == y) 
    {
        return 0;
    }
    return rem((x - 1), y) + 1;
}

我收到 9 次 rem(3/2) 的递归调用

【问题讨论】:

  • 应该是x-y,而不是x-1

标签: java c++ c algorithm recursion


【解决方案1】:

是的,在 java 中,您可以通过以下方式执行此操作:

public static void main(String args[]) {
    int remainder = remainder(3,2);
    System.out.println(remainder);
}

static int remainder(int n1, int n2) {
    int x;
    x = n1;
    if (x >= n2) {
        x = x - n2;
        remainder(x, n2);
    }
    return x;
}

注意:我没有在代码中添加条件来检查 0。 希望这会有所帮助。

【讨论】:

    【解决方案2】:

    当然,这就是你可以让它变得更好的方法。

    int rem(int x, int y) {
    
        if (x == 0) {
            return 0;
        }
    
        int ret = rem(x - 1, y);
    
        if (ret + 1 == y) {
            return 0;
        }
    
        return ret + 1;
    }
    
    

    我们可以只调用一次函数并将其输出存储在一个变量中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-03
      • 2015-07-28
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多