无法在递归java函数中计算总和
Posted
技术标签:
【中文标题】无法在递归java函数中计算总和【英文标题】:Not able to calculate sum in recursive java function 【发布时间】:2022-01-20 19:49:06 【问题描述】:下面的代码允许用户输入值,然后取所有给定值的总和,然后通过递归给出总和。下面的代码允许用户输入每个 int 并提供 sum
import java.util.Scanner;
public class Recursion
public static int Recursion1(int userSum)
if (userSum == 0)
return userSum;
else
return userSum + Recursion1(userSum - 1);
public static void main(String[] args)
int userSum = 0;
Scanner scan = new Scanner(System.in);
System.out.println("Program Started");
System.out.println(Recursion1(userSum));
int counter = 0;
int i;
for(i=0;i < 5;i++)
//ask user input
System.out.print("Enter any number: ");
userSum = scan.nextInt();
scan.close();
int sumNum=Recursion1(userSum);
System.out.println("The sum of digits is: "+sumNum);
System.out.println("Scanner Closed.");
【问题讨论】:
例如,当我将 10 10 10 10 10 的总和相加时,它等于 55,这是不正确的。只有当我计算 1 2 3 4 5 的总和为 15 时,它似乎才有效。 您对 10 10 10 10 10 的预期答案是什么? @Tonia Saba 您只接受最后一个用户输入,然后将所有数字相加。所以如果最后一个输入是 8 你实际上是在做8+7+6+5+4+3+2+1
。这就是为什么做1,2,3,4,5
似乎它正在工作,因为最后一个是5
它确实是5+4+3+2+1
@WingKuiTsoi 50,而不是 55
Recursion1
根据 java 命名约定应该是 recursion1
。
【参考方案1】:
这是你想要的吗?
for(i=0;i < 5;i++)
//ask user input
System.out.print("Enter any number: ");
userSum += scan.nextInt();
System.out.println("The sum of digits is: " + userSum);
【讨论】:
通常是的,但他们要求使用递归方法。这很可能是一个家庭作业问题。【参考方案2】:对于初学者来说,您的代码存在几个问题:
for(i=0;i < 5;i++)
//ask user input
System.out.print("Enter any number: ");
userSum = scan.nextInt();
在上面的代码中,您没有存储用户插入的 5 个数字,您只存储了最后一个,因为您不断覆盖变量 userSum
。
要存储多个值,最好的方法是数组或列表。
您的代码的第二个问题是您的递归方法:
public static int Recursion1(int userSum)
if (userSum == 0)
return userSum;
else
return userSum + Recursion1(userSum - 1);
当您使用int
x 调用此方法时,它会为您提供从 x 到 0 的所有数字的总和。
所以如果你用输入 3 调用它,它会给你 3 + 2 + 1 + 0 = 6
您想要的是使用递归函数对用户输入的所有数字求和。
一种方法如下:
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
public class Main
public static int sumByRecursion(List<Integer> inputList)
if (inputList.size() == 1)
return inputList.get(0);
else
return inputList.get(0) + sumByRecursion(inputList.subList(1,inputList.size()));
public static void main(String[] args)
List<Integer> inputList = new ArrayList<>();
Scanner scan = new Scanner(System.in);
System.out.println("Program Started");
for(int i=0; i < 5; i++)
//ask user input
System.out.print("Enter any number: ");
inputList.add(scan.nextInt());
scan.close();
int sumNum = sumByRecursion(inputList);
System.out.println("The sum of digits is: "+sumNum);
【讨论】:
以上是关于无法在递归java函数中计算总和的主要内容,如果未能解决你的问题,请参考以下文章