给定一个数组A [],我们需要使用尾递归方法找到其元素的总和。我们通常希望实现尾部递归(一种递归函数,其中递归调用是函数执行的最后一件事),以便编译器可以优化代码。基本上,如果递归调用是最后一条语句,则编译器不需要保存父调用的状态。
例子:
Input : A[] = {1, 8, 9}
Output : 18
Input : A[] = {2, 55, 1, 7}
Output : 65
有关线性递归方法,请参阅:https://www.geeksforgeeks.org/sum-array-elements-using-recursion/
逻辑:在此,尾部递归的关键是对函数调用进行的任何操作,请将其维护为单独的函数参数。
因此,将最后元素K个元素的和作为函数参数,并在K = 0时返回和。
C++
#include
using namespace std;
// Tail recursive function
int arrSum(int* array, int size, int sum = 0)
{
// Base Case
if (size == 0)
return sum;
// Function Call Observe sum+array[size-1]
// to maintain sum of elements
return arrSum(array, size - 1, sum + array[size - 1]);
}
int main()
{
int array[] = { 2, 55, 1, 7 };
int size = sizeof(array) / sizeof(array[0]);
cout << arrSum(array, size);
return 0;
}
Java
// Java implementation of the given approach.
class GFG
{
// Tail recursive function
static int arrSum(int []array, int size, int sum)
{
// Base Case
if (size == 0)
return sum;
// Function Call Observe sum+array[size-1]
// to maintain sum of elements
return arrSum(array, size - 1, sum + array[size - 1]);
}
// Driver code
public static void main(String[] args)
{
int array[] = { 2, 55, 1, 7 };
int size = array.length;
System.out.print(arrSum(array, size, 0));
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 implementation of the given approach.
# Tail recursive function
def arrSum(array, size, Sum = 0):
# Base Case
if size == 0:
return Sum
# Function Call Observe sum+array[size-1]
# to maintain sum of elements
return arrSum(array, size - 1,
Sum + array[size - 1])
# Driver Code
if __name__ == "__main__":
array = [2, 55, 1, 7]
size = len(array)
print(arrSum(array, size))
# This code is contributed by Rituraj Jain
C#
// C# implementation of the given approach.
using System;
class GFG
{
// Tail recursive function
static int arrSum(int []array, int size, int sum)
{
// Base Case
if (size == 0)
return sum;
// Function Call Observe sum+array[size-1]
// to maintain sum of elements
return arrSum(array, size - 1, sum + array[size - 1]);
}
// Driver code
public static void Main(String[] args)
{
int []array = { 2, 55, 1, 7 };
int size = array.Length;
Console.WriteLine(arrSum(array, size, 0));
}
}
// This code is contributed by 29AjayKumar
输出:
65
时间复杂度: O(n)