以递归方式添加生日的连续数字,直到达到一位数

时间:2018-06-06 12:04:34

标签: java recursion numbers

我正在开发一个数字命理应用程序,它必须提供类似于以下的结果,

1 5 0 8 1 9 9 4

6 5 8 9 1 1 1

1 1 1 1 2 2

2 2 2 3 4

4 4 5 7

8 9 1

1 1

2

如果总和为2位,则必须添加连续数字并保留第一个数字。

我错过了什么。为intList的长度添加while循环似乎不起作用。

int date;
List<Integer> sumList = new ArrayList<Integer>();

Scanner s = new Scanner(System.in);
System.out.println("Enter the date");
date = s.nextInt();

int len = Integer.toString(date).length();

int[] convertarray = new int[len];

for (int index = 0; index < len; index++) {
    convertarray[index] = date % 10;
    date /= 10;
}

List<Integer> intList = new ArrayList<Integer>();
for (int i : convertarray) {
    intList.add(i);
}
Collections.reverse(intList);
System.out.println(intList);
int sum = 0;
int size = intList.size();

for (int i = 0; i < intList.size() - 1; i++) {
    sum = intList.get(i) + intList.get(i + 1);
    int length = (int) (Math.log10(sum) + 1);
    if (length > 1) {
        int firstDigit = Integer.parseInt(Integer.toString(sum).substring(0, 1));
        sum = firstDigit;
    }
    System.out.print(sum + " ");

    sumList.add(sum);

}
System.out.println("\n");
intList.clear();
intList = sumList;

我的输出类似于

1 5 0 8 1 9 9 4

6 5 8 9 1 1 1

2 个答案:

答案 0 :(得分:0)

  

为intList的长度添加while循环似乎不起作用。

嗯,它可以通过循环完成,但它会更难和更混乱。

具有递归的算法如下:

  • 初始化整数数组。
  • 使用数组调用递归函数“F”。

从现在起,递归函数行为:

  • 检查收到的数组的长度是否为1.

    • 如果是,请打印元素并终止。

    • 如果不是:

      • 打印收到的数组。
      • 制作一个新阵列。
      • 将新收集的处理结果放入此新数组中。
      • 使用这个新数组调用递归函数“F”。

答案 1 :(得分:0)

一个简单的递归解决方案:

public static void main(String[] args) throws Exception {
    String birthday = "01091995";
    int[] digits = Arrays.stream(birthday.split("")).mapToInt(Integer::parseInt).toArray();
    recursiveFunction(digits);
}

private static void recursiveFunction(int[] digits) {
    if(digits.length == 1) {
        // Base Case
        System.out.println(digits[0]);
    } else {
        // Recursive Case
        System.out.println(Arrays.toString(digits));
        int[] digitsProcessed = new int[digits.length -1];
        for (int i = 0; i < digits.length - 1; i++) {
            digitsProcessed[i] = digits[i] + digits[i+1]; // Logic
        }
        recursiveFunction(digitsProcessed);
    }
}

这会产生:

[0, 1, 0, 9, 1, 9, 9, 5]  // 8 numbers
[1, 1, 9, 10, 10, 18, 14] // 7 numbers
[2, 10, 19, 20, 28, 32]   // 6 numbers
[12, 29, 39, 48, 60]      // 5 numbers
[41, 68, 87, 108]         // 4 numbers
[109, 155, 195]           // 3 numbers
[264, 350]                // 2 numbers
614                       // 1 number