使用递归函数时堆栈溢出
Stack overflow while using recursive function
我正在尝试完成一个简单的编码挑战,需要我执行以下操作:
给你n,return一个数组ans,组成如下:
`ans = [n, n - 5, n - 10, ... , m, m + 5, ... , n - 5, n]`, where m stands for the first non-positive integer obtained by subtractions.
尝试不使用任何循环来解决它。
例子
对于n = 25
,输出应该是
listWithoutLoop(n) = [25, 20, 15, 10, 5, 0, 5, 10, 15, 20, 25].
我已经完成了这段代码:
int[] listWithoutLoop(int n)
{
List<int> test = new List<int>();
if (test.Count > 2 && test[test.Count - 1] == n)
return test.ToArray();
if (n <= 0)
{
test.Add(n + 5);
return listWithoutLoop(n + 5);
}
else
{
test.Add(n - 5);
return listWithoutLoop(n - 5);
}
}
但是当 运行 它时,我总是遇到堆栈溢出。 c#支持递归吗?如果是这样,如何防止在 运行 时出现 Whosebug 异常?
您必须在 listWithoutLoop()
方法上方定义 test
列表。
List<int> test = new List<int>();
int[] listWithoutLoop(int n)
{
....
}
为了简化,我将函数拆分为分别加法和减法(始终拥有简单易懂的代码总是更好)
static void Main()
{
int n = 20;
int interval = 5;
List<int> list = new List<int>();
AddDown(list, n, 0, interval);
AddUp(list, 0, n, interval);
int[] arrInt = list.ToArray();
}
static void AddDown(List<int> list, int currentNumber, int targetNumber, int interval)
{
if(currentNumber > targetNumber)
{
list.Add(currentNumber);
AddDown(list, currentNumber - interval, targetNumber, interval);
}
}
static void AddUp(List<int> list, int currentNumber, int targetNumber, int interval)
{
if (currentNumber <= targetNumber)
{
list.Add(currentNumber);
AddUp(list, currentNumber + interval, targetNumber, interval);
}
}
我正在尝试完成一个简单的编码挑战,需要我执行以下操作:
给你n,return一个数组ans,组成如下:
`ans = [n, n - 5, n - 10, ... , m, m + 5, ... , n - 5, n]`, where m stands for the first non-positive integer obtained by subtractions.
尝试不使用任何循环来解决它。
例子
对于n = 25
,输出应该是
listWithoutLoop(n) = [25, 20, 15, 10, 5, 0, 5, 10, 15, 20, 25].
我已经完成了这段代码:
int[] listWithoutLoop(int n)
{
List<int> test = new List<int>();
if (test.Count > 2 && test[test.Count - 1] == n)
return test.ToArray();
if (n <= 0)
{
test.Add(n + 5);
return listWithoutLoop(n + 5);
}
else
{
test.Add(n - 5);
return listWithoutLoop(n - 5);
}
}
但是当 运行 它时,我总是遇到堆栈溢出。 c#支持递归吗?如果是这样,如何防止在 运行 时出现 Whosebug 异常?
您必须在 listWithoutLoop()
方法上方定义 test
列表。
List<int> test = new List<int>();
int[] listWithoutLoop(int n)
{
....
}
为了简化,我将函数拆分为分别加法和减法(始终拥有简单易懂的代码总是更好)
static void Main()
{
int n = 20;
int interval = 5;
List<int> list = new List<int>();
AddDown(list, n, 0, interval);
AddUp(list, 0, n, interval);
int[] arrInt = list.ToArray();
}
static void AddDown(List<int> list, int currentNumber, int targetNumber, int interval)
{
if(currentNumber > targetNumber)
{
list.Add(currentNumber);
AddDown(list, currentNumber - interval, targetNumber, interval);
}
}
static void AddUp(List<int> list, int currentNumber, int targetNumber, int interval)
{
if (currentNumber <= targetNumber)
{
list.Add(currentNumber);
AddUp(list, currentNumber + interval, targetNumber, interval);
}
}