【问题标题】:Recursion method in Java providing incorrect outputJava中的递归方法提供不正确的输出
【发布时间】:2018-08-20 03:18:11
【问题描述】:

我正在开发一个程序,该程序将从用户那里获取五个数字,然后使用递归为用户提供这些数字的总和。我的程序起初似乎可以工作,但是在我的测试中,我发现它只是取用户输入的第一个数字,然后基本上将其乘以 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));

    }
    }

【问题讨论】:

  • 传入数组和要求和的元素的索引而不是每次都创建一个新副本不是更有效吗?
  • 您的问题是 Arrays.copyOf(newArray, n-1) 复制了数组的前 n-1 个元素。所以你得到前 5 个中的第一个,然后是前 4 个中的第一个,然后是前 3 个中的第一个,...... - 所以你添加第一个,5 次。
  • Arrays.copyOf(newArray, n-1) 应该更像Arrays.copyOfRange(newArray, 1, n),否则你只是修剪掉最后一个元素

标签: java recursion methods


【解决方案1】:

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));

}

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

【讨论】:

    猜你喜欢
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-06-15
    • 1970-01-01
    • 2018-02-27
    • 2010-11-19
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多