📜  使用递归求N个数字之和的Java程序

📅  最后修改于: 2022-05-13 01:55:10.340000             🧑  作者: Mango

使用递归求N个数字之和的Java程序

递归是一个函数反复调用自身直到它落入基本条件并实现我们的动机的过程。

使用递归解决任何问题,我们只需按照以下步骤操作:

  1. 从与较大/原始问题相似的问题中假设/识别较小的问题。
  2. 决定作为我们基本条件的最小有效输入或最小无效输入的答案。
  3. 接近解决方案并将答案链接到递归函数给出的较小问题,以使用它找到较大/原始问题的答案。

在这里,我们将说明使用递归的总和可以通过将数字存储在数组中来完成,并使用递归对所有数字求和。

例子

Input: N = 5, arr[] = {70, 60, 90, 40, 80}
Output: Total Sum = 340

Input: N = 8, arr[] = {8, 7, 6, 5, 4, 3, 2, 1}
Output: Total Sum = 36

方法:

现在,我们将应用上面在这个问题中讨论的方法来递归计算所有元素的总和。

  • 较小的问题将是从索引 1 到最后一个索引的数组。
  • 基本条件将是索引将达到数组的长度。即超出数组的长度,这意味着不存在元素,因此返回的总和应为 0。
  • 现在,我们的任务是使用较小问题计算的结果来解决较大/原始问题。所以,要做到这一点,我们知道较小的问题是从 index1 到最后一个索引,所以如果我们得到这个问题的总和,那么在整个数组总和之后,我们只需要将第一个元素/第 i 个元素添加到该答案中,然后返回我们的最终答案。

下面是上述方法的实现。

例子:

Java
// Java program to calculate the sum of
// the elements of the array recursively
 
import java.io.*;
 
class GFG {
    // recursive function
    public static int calculate_sum_using_recursion(int arr[], int i,
                                  int length)
    {
        // base condition - when reached end of the array
        // return 0
        if (i == length) {
            return 0;
        }
       
        // recursive condition - current element + sum of
        // (n-1) elements
       
        return arr[i]
         + calculate_sum_using_recursion(arr, i + 1,length);
       
    }
 
    public static void main(String[] args)
    {
       
        int N = 5, total_sum = 0;
       
        // create 1-D array to store numbers
        int arr[] = { 89, 75, 82, 60, 95 };
       
        // call function to calculate sum
        total_sum = calculate_sum_using_recursion(arr, 0, N);
       
        // print total sum
        System.out.println("The total of N numbers is : "
                           + total_sum);
    }
}


Java
// Java program to calculate the sum of
// the elements of array using recursion
 
import java.io.*;
 
class GFG {
   
    // recursive function
    public static int calculate_sum_using_recursion(int arr[], int length)
    {
        // base condition - when reached -1 index
        // return 0
        if (length == -1) {
            return 0;
        }
       
        // recursive condition - current element + sum of
        // (n-1) elements
        return arr[length]
            + calculate_sum_using_recursion(arr,length - 1);
       
    }
 
    public static void main(String[] args)
    {
        int N = 8, total_sum = 0;
       
        // create 1-D array to store numbers
        int arr[] = { 8, 7, 6, 5, 4, 3, 2, 1 };
       
        // call function to calculate sum
        total_sum = calculate_sum_using_recursion(arr, N - 1);
       
        // print total sum
        System.out.println("The total of N numbers is : "
                           + total_sum);
    }
}



输出
The total of N numbers is : 401

方法二:

我们不仅可以通过一种方式应用递归,而且可以有一种或多种方式来使用递归解决单个问题。

上面的方法中,我们从正向开始递归,并在结束/最后位置到达并命中基本条件。

这种方法中,我们将函数中的长度变量视为变化的参数,其中长度变量将从最后一个位置开始,基本情况将到达前部越界索引 -1。

例子:

Java

// Java program to calculate the sum of
// the elements of array using recursion
 
import java.io.*;
 
class GFG {
   
    // recursive function
    public static int calculate_sum_using_recursion(int arr[], int length)
    {
        // base condition - when reached -1 index
        // return 0
        if (length == -1) {
            return 0;
        }
       
        // recursive condition - current element + sum of
        // (n-1) elements
        return arr[length]
            + calculate_sum_using_recursion(arr,length - 1);
       
    }
 
    public static void main(String[] args)
    {
        int N = 8, total_sum = 0;
       
        // create 1-D array to store numbers
        int arr[] = { 8, 7, 6, 5, 4, 3, 2, 1 };
       
        // call function to calculate sum
        total_sum = calculate_sum_using_recursion(arr, N - 1);
       
        // print total sum
        System.out.println("The total of N numbers is : "
                           + total_sum);
    }
}


输出
The total of N numbers is : 36