无法在递归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函数中计算总和的主要内容,如果未能解决你的问题,请参考以下文章

我想使用递归函数根据用户输入 N 计算前 N 个偶数的总和

终于搞明白了二叉树的递归函数是否需要返回值

如何使用递归函数计算和打印以下序列的前 N ​​个元素的总和

是否有一个函数可以让数组在java中找到总和、均值和标准差

递归求和函数,我如何限制总和?

无法理解此递归函数