首页 > 解决方案 > 对Java中的偶数索引位置求和

问题描述

我尝试编写一种方法(用于踢球),该方法可以使用 Java 递归对偶数位置的数字求和。例如,数字 23495 将返回 3+9 = 12。

我不成功,希望得到提示或我做错了什么。

    int sumEven = 0;
    int sumOdd = 0;
    int i = 1; 
    if (n == 0)
    return sumEven;

    if (n != 0) { 

        if (i % 2 == 0) 
        {
            i++;
            sumEven += n % 10; 
        }
        else
        {
            i++;
            sumOdd += n % 10; 
        }
    } 

    return sumEven + getEven (n/=10);

标签: java

解决方案


问题是你试图做太多 - 看看我对 Q 的评论

递归方法需要一个输入,该输入包含它需要使用的所有内容、一个返回值和一个执行路径,在该路径中它调用自己直到发生某些事情,这意味着它不再需要调用自己——没有这个位,它将求助直到它溢出堆栈

int sumEveryOtherDigit(int input){

  if(input >= 100)
    return input%10 + sumEveryOtherDigit(input/100);
  else
    return input%10;

}

这需要输入,如果有任何需要再次运行的点(如果输入至少为 100),则需要最右边的数字加上以较小的数字再次运行自身

最终这个数字变得如此之小,以至于没有任何点再次运行自己,所以它只是返回而不再次运行自己,这就是递归停止的方式

现在,从您对另一个答案的评论来看,您似乎想确定从左侧开始的偶数和奇数,因此我们需要从数字 (1630) 或数字除以十 (23495 -> 2349) 开始 - 基本上是开始递归我们总是想传入一个偶数位数的数字

int num = 23495;
int numOfDigits = (int)Math.log10(num)+ 1;

if(numOfDigits%2==0)
 result = sumEveryOtherDigit(num);
else
  result = sumEveryOtherDigit(num/10);

推荐阅读