改进了计算余数的递归

improve recursion for calculating remainder

本文关键字:递归 余数 计算      更新时间:2023-10-16

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

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(

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

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;
}

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

是的,当然,在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。 希望这有帮助。