Java:关于递归计数

时间:2018-03-29 21:34:38

标签: java recursion

我在找到的一项运动中遇到了一些问题。

我提供了一种方法,无法对其进行任何更改。

在所述方法中,我应该识别第一个重复数字,beetwen两个整数,并返回它的位置。

例如:1234和4231结果为1.

我设法让它发挥作用,

如果我尝试不止一次使用该方法,它就无法工作,它只是不断添加到以前的值。

这是我目前的代码

public static final int BASENUMERACAO = 10;
public static int indice = 0;
private static int getLowestIndexWithSameDigit(int a, int b) {
    if (a < 0 || b < 0) {
        throw new IllegalArgumentException("Both numbers should positive " + a + " " + b);
    } else {
        if (a % BASENUMERACAO == b % BASENUMERACAO) {
            return indice;
        } else if (a / BASENUMERACAO != 0 && b / BASENUMERACAO != 0) {
            indice++;
            return getLowestIndexWithSameDigit(a / BASENUMERACAO, b / BASENUMERACAO);
        } else {
            return -1;
        }
    }

我尝试将index作为局部变量传递,但它只是覆盖了curent值,每次调用它时,因此只返回0或-1

有人可以告诉我如何以递归方法计算,或者我如何识别计数器上的数字?

2 个答案:

答案 0 :(得分:0)

创建另一个方法来调用递归方法,并使用您需要的变量作为递归版本的参数并继续传递它们。

类似的东西:

private static int myMethod( int a, int b ) {
    return myRecursiveMethod( a, b, 0, 0 );
}

private static int myRecursiveMethod( int a, int b, int var1, int var2 ) {
    // do the recursive work...
    myRecursiveMethod( newValueForA, newValueForB, var1, var2 ) {
}

答案 1 :(得分:0)

问题是您在indice变量中保留了先前调用的状态。 indice是可变全局状态的一个示例,由于您在此遇到的原因,这通常是一个坏主意:您可能会将先前计算的结果转移到新计算中,从而导致不可预测(或可能是意外)的结果。

indice变量设为方法的参数:

private static int getLowestIndexWithSameDigit(int a, int b, int indice) {
  // ...
}

因此,您的递归调用也会传递一个值:

return getLowestIndexWithSameDigit(a / BASENUMERACAO, b / BASENUMERACAO, indice);

要开始迭代,您可以显式传递0,也可以创建一个只带a和b的方法:

private static int getLowestIndexWithSameDigit(int a, int b) {
  return getLowestIndexWithSameDigit(a, b, 0);
}