Java中的递归方法提供了错误的输出

时间:2018-08-20 03:18:12

标签: java recursion methods

我正在开发一个程序,该程序将从用户那里获取五个数字,然后使用递归将为用户提供这些数字的总和。我的程序起初似乎工作正常,但是在我的测试中,我发现它只是采用用户输入的第一个数字并将其基本乘以5,而不是采用不同的数字求和。我在哪里错呢?就像我说的,我没有遇到任何错误,但是它并没有采用额外的四个数字并计算五个数字的总和。总是感谢您的任何帮助。

import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.Scanner;

    public class sumRecusion2 {
        static int i;
        static int N = 5;
        static int[] userNum= new int[N];

        public static int sumUser(int newArray[]) {
            int n = newArray.length;
            if (n == 0)
                return 0;
            int ans = newArray[0]+sumUser(Arrays.copyOf(newArray, n-1));

            return ans;

        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Scanner scnr = new Scanner(System.in);
            try {
            for(i = 0; i<=userNum.length-1; i++) {
                System.out.println("Please enter a number: ");
                userNum[i]= scnr.nextInt();
                }}
            catch(InputMismatchException ex) {
                System.out.println("Please enter an integer without a decimal point!");
                        }
            System.out.println("The sum of your numbers is: "+ sumUser(userNum));

    }
    }

1 个答案:

答案 0 :(得分:2)

Arrays.copyOf(newArray, n - 1)只是修剪数组中的最后一个元素,这意味着您只是将第一个元素相加n次。

我会考虑改用Arrays.copyOfRange(newArray, 1, n),它将从第二个元素开始复制数组(修剪第一个元素)

我个人可能会想传入数组和要求和的元素的索引,这样会比复制n个数组副本的效率更高。

static int i;
static int N = 5;
static int[] userNum = new int[N];

public static int sumUser(int newArray[], int index) {
    if (index >= newArray.length) {
        return 0;
    }
    int ans = newArray[index] + sumUser(newArray, index + 1);

    return ans;

}

public static void main(String[] args) {
    // TODO Auto-generated method stub
    userNum = new int[] {1, 2, 3, 4, 5};
    System.out.println("The sum of your numbers is: " + sumUser(userNum, 0));

}

但是,您的要求可能有所不同