【问题标题】:Not able to calculate sum in recursive java function无法在递归java函数中计算总和
【发布时间】: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

标签: java recursion sum user-input


【解决方案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);
    }
}

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2018-12-10
    • 2019-09-03
    • 2020-05-25
    • 2017-05-26
    相关资源
    最近更新 更多