Java:使用递归添加相邻的相同数字

Java:使用递归添加相邻的相同数字,java,recursion,Java,Recursion,如果您得到的是数字56885,请使用递归并查找数字“8”彼此相邻的所有时间。所以通过每一个数字递归。然后,把8加在一起 因此56885将返回16。 到目前为止我所拥有的 public int added(int number){ int count = 0; while (number > 0){ return added(number-1); } return count; } 对于相邻的所

如果您得到的是数字56885,请使用递归并查找数字“8”彼此相邻的所有时间。所以通过每一个数字递归。然后,把8加在一起 因此56885将返回16。 到目前为止我所拥有的

public int added(int number){
        int count = 0;
        while (number > 0){
            return added(number-1);
        }
        return count;
    }

对于相邻的所有重复数字:

static void sumOfDigit(int sum, boolean prevProcessed, int number, int prevNumber) {
    if (number == 0) {
        System.out.println("Sum of number is : " + sum);
        return;
    }

    int n1 = number % 10;
    if (n1 == prevNumber) {
        if (!prevProcessed) {
            sum += prevNumber;
        }
        sum += n1;
        prevProcessed = true;
    } else {
        prevProcessed = false;
    }

    prevNumber = n1;

    sumOfDigit(sum, prevProcessed, number / 10, prevNumber);
}

public static void main(String args[]) {
    int num = 12883345;
    sumOfDigit(0, false, num, 0);
}
static void sumOfDigit(int sum, boolean prevProcessed, int number, int prevNumber, int digitToCheck) {
    if (number == 0) {
        System.out.println("Sum of number is : " + sum);
        return;
    }

    int n1 = number % 10;
    if (n1 == digitToCheck && n1 == prevNumber) {
        if (!prevProcessed) {
            sum += prevNumber;
        }
        sum += n1;
        prevProcessed = true;
    } else {
        prevProcessed = false;
    }

    prevNumber = n1;

    sumOfDigit(sum, prevProcessed, number / 10, prevNumber, digitToCheck);
}

public static void main(String args[]) {
    int num = 586885;
    int digitToCheck = 8;
    sumOfDigit(0, false, num, 0, digitToCheck);
}
如果只需要检查特定数字:

static void sumOfDigit(int sum, boolean prevProcessed, int number, int prevNumber) {
    if (number == 0) {
        System.out.println("Sum of number is : " + sum);
        return;
    }

    int n1 = number % 10;
    if (n1 == prevNumber) {
        if (!prevProcessed) {
            sum += prevNumber;
        }
        sum += n1;
        prevProcessed = true;
    } else {
        prevProcessed = false;
    }

    prevNumber = n1;

    sumOfDigit(sum, prevProcessed, number / 10, prevNumber);
}

public static void main(String args[]) {
    int num = 12883345;
    sumOfDigit(0, false, num, 0);
}
static void sumOfDigit(int sum, boolean prevProcessed, int number, int prevNumber, int digitToCheck) {
    if (number == 0) {
        System.out.println("Sum of number is : " + sum);
        return;
    }

    int n1 = number % 10;
    if (n1 == digitToCheck && n1 == prevNumber) {
        if (!prevProcessed) {
            sum += prevNumber;
        }
        sum += n1;
        prevProcessed = true;
    } else {
        prevProcessed = false;
    }

    prevNumber = n1;

    sumOfDigit(sum, prevProcessed, number / 10, prevNumber, digitToCheck);
}

public static void main(String args[]) {
    int num = 586885;
    int digitToCheck = 8;
    sumOfDigit(0, false, num, 0, digitToCheck);
}

当你说“相同的数字”和“相似的数字”时,你是指重复的十进制数字吗?说明你到目前为止做了什么你有义务使用递归吗?@69420没有,因为递归需要更多的数据,而不仅仅是一个参数。在我看来,可能对问题的实际细节有误解。@69420递归确实需要多个参数才能工作。通常,它需要一个索引、一组数据和一些方法来跟踪以前的工作迭代。
twinSum(56885)
返回1,预期结果为16。请重新阅读问题。@Andreas修复了错误,并调整了答案,因为OP更改了问题。如果可以,请检查。5868588的输出应为16,但您的代码正在重新调整32。
key=8
是错误的假设。该方法应该是找到“相邻的相同数字”。这些数字可以是任何值。仅仅因为示例中两个8相邻,并不意味着它总是8。例如,input
747455
应返回10,因为
5+5=10
。我理解这一点,但OP规定应将其硬编码为8,因此我不得不这样做。请检查您是否可以在上面实现我的参数。上述代码对相邻数字相同的数字求和。如果它不工作,请告诉我。不确定输出是否按预期工作。我正在寻找一个int参数,其他参数是支持参数,用于将上一个数字带入下一个递归调用。是的,对于我的要求,我只需要1