gpt4 book ai didi

arrays - 如何避免递归中的返回语句

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:21:22 25 4
gpt4 key购买 nike

此程序用于打印作为输入参数给出的数组中所有数字的总和。然而,这不会发生。请让我知道错误是什么,并向我提供解决方案和解释。

namespace linkedLists
{
class Program
{
static void Main(string[] args)
{
int[] arr = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int x = sumOfNum(arr, 0);
Console.WriteLine(x);
Console.ReadLine();
}
public static int sumOfNum(int[] arr, int x)
{
int[] arr_new = new int[arr.Length - 1];
if (arr.Length > 1)
{
x += arr[arr.Length - 1];
for (int i = 0; i < arr.Length - 1; i++)
{
arr_new[i] = arr[i];
}
}

if (arr.Length > 1)
{
sumOfNum(arr_new, x);
}

return x;
}
}
}

最佳答案

你的问题的标题是“如何在递归中避免返回语句”,这正是你应该做的,而不是在递归场景中避免。

但这不是您的代码的唯一问题,因为它没有按照您描述的那样执行。

正如评论中已经提到的,这不是需要(或建议)使用递归方法的东西。它可以做到,但效率低下,如果输入数组很大(它需要为 c# 中的每个递归方法调用一个新的堆栈帧)导致堆栈溢出。

要以递归方式解决此问题,您需要在开始尝试编写代码之前尝试将该问题表述为递归问题。在伪代码中,对于大小为 n 的输入数组 x:

array_sum(x):
if (x is empty)
return 0;
else
return x[0] + array_sum(x[1:n-1])

C# 中的实现将尝试避免分配新的数组实例(而不是问题代码中的非功能部分正在做的事情),而是跟踪输入数组的起始索引:

public static array_sum(int startIndex, int[] x) 
{
// ...
}

关于arrays - 如何避免递归中的返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30559958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com