Java中的递归方法提供了不正确的输出
我正在开发一个程序,该程序将从一个用户那里获取五个数字,然后使用递归将向用户提供这些数字的总和。我的程序一开始似乎运行正常,但在我的测试中,我发现它只是取用户输入的第一个数字,然后基本上乘以5,而不是取不同的数字求和。这件事我哪里做错了?正如我所说,我没有得到任何错误,但是它没有采取额外的四个数字和计算五个数字的总和。任何帮助我们都将不胜感激。谢谢Java中的递归方法提供了不正确的输出,java,recursion,methods,Java,Recursion,Methods,我正在开发一个程序,该程序将从一个用户那里获取五个数字,然后使用递归将向用户提供这些数字的总和。我的程序一开始似乎运行正常,但在我的测试中,我发现它只是取用户输入的第一个数字,然后基本上乘以5,而不是取不同的数字求和。这件事我哪里做错了?正如我所说,我没有得到任何错误,但是它没有采取额外的四个数字和计算五个数字的总和。任何帮助我们都将不胜感激。谢谢 import java.util.Arrays; import java.util.InputMismatchException; import j
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));
}
}
导入java.util.array;
导入java.util.InputMismatchException;
导入java.util.Scanner;
公营房屋{
静态int-i;
静态int N=5;
静态int[]userNum=新int[N];
公共静态int-sumUser(int-newArray[]{
int n=newArray.length;
如果(n==0)
返回0;
int ans=newArray[0]+sumUser(Arrays.copyOf(newArray,n-1));
返回ans;
}
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
扫描仪scnr=新扫描仪(System.in);
试一试{
对于(i=0;i数组,copyOf(newArray,n-1)
只是从数组中修剪最后一个元素,这意味着您只是将第一个元素n
次相加
我会考虑使用<代码>数组.CopyOfFrand(NeWayRay,1,n)< /Cord>,这将使数组从第二个元素(第一个元素的修剪)
开始复制。
一、 就个人而言,可能会尝试传入数组和要求和的元素的索引,这将比生成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));
}
但是,您的要求可能会有所不同传入数组和要求和的元素的索引是否比每次生成一个新的副本更有效?您的问题是Arrays.copyOf(newArray,n-1)
复制数组的前n-1个元素。因此,您将得到前5个元素中的第一个,然后是前4个元素中的第一个,然后是前3个元素中的第一个,…-因此您将第一个元素添加了5次。数组。copyOf(newArray,n-1)
应该更像数组。copyOfRange(newArray,1,n)
,否则您只需修剪最后一个元素