Java程序递归不起作用

Java程序递归不起作用,java,math,recursion,Java,Math,Recursion,我正试图产生一系列的数字和之前的条款 1,1,2,4,8,16,23,28,38,49,62,70,77,91,101,103,107,115,122,127 这是我的密码 import java.math.BigInteger; import java.util.ArrayList; public class Problem { public static int getDigitSum(int number) { int total = 0;

我正试图产生一系列的数字和之前的条款

1,1,2,4,8,16,23,28,38,49,62,70,77,91,101,103,107,115,122,127

这是我的密码

import java.math.BigInteger;
import java.util.ArrayList;
public class Problem {
        public static int getDigitSum(int number) {
            int total = 0;
            while ( number>0) {
                total +=  total + number%10;
                number = number /10;         


        }
      return total;
    }


    public static int getSum(int number) {
    if ((number == 0) || (number == 1)) // base cases
      return number;
    else
      // recursion step
      return getSum(getDigitSum(number - 1)) +  getSum(number - 2);
  } 

    public static void main( String s []) {
        int sum =0, difference=1, previous =1, last;
        //ArrayList <Integer> sum_list =  new ArrayList <Integer>();
        //sum_list.add(prevous);
        for (int i = 1; i<10; i++) {
            System.out.println(getSum(i));
        }
    }
}

很难说代码到底出了什么问题,但它并没有遵循以下公式:

对于n>1,an=an-1+an-1的位数之和

因此,您的代码应该如下所示:

public static int getDigitSum(int number) {
    int total = 0;
    while (number > 0) {
        total += number % 10;
        number /= 10;
    }
    return total;
}

public static int getSum(final int number) {
    if (number <= 1) {
        return 1;
    } else {
        final int sum = getSum(number - 1); // a(n-1) from formula
        return sum + getDigitSum(sum); // sum of digits of a(n-1) from formula
    }
}
您的代码存在两个主要问题:

总数+=总数+数量%10;双倍和 getSumnumber-2应使用-1
那些投反对票的人,请评论投反对票的原因我投票结束这个问题,因为OP不希望任何人回答。@AndyTurner 1+1+2+4+8+16,其中16={1+6}=7@AndyTurner我想karu的意思是:我不希望你为我写工作代码,但是你能解释一下为什么我的代码不起作用吗?FAQ告诉你为什么投票失败:为什么我的代码不起作用?那么问题出在哪里?@karu你实现了错误的公式OK。我现在明白了。我不明白递归在哪里失败了。
public static int getDigitSum(int number) {
    int total = 0;
    while (number > 0) {
        total += number % 10;
        number /= 10;
    }
    return total;
}

public static int getSum(final int number) {
    if (number <= 1) {
        return 1;
    } else {
        final int sum = getSum(number - 1); // a(n-1) from formula
        return sum + getDigitSum(sum); // sum of digits of a(n-1) from formula
    }
}
for (int i = 0; i <= 10; i++) {
    System.out.println(getSum(i));
}
1
1
2
4
8
16
23
28
38
49
62