gpt4 book ai didi

c# - 使用 for 循环进行选择排序的递归

转载 作者:太空宇宙 更新时间:2023-11-03 12:03:57 26 4
gpt4 key购买 nike

我有一个递归选择排序方法,在另一个方法中有一个初始递归调用。但是我在递归方法中使用了一个for循环。如果我有一个for循环,它仍然是一个递归方法吗?如何在没有 for 循环的情况下递归地实现选择排序?

private static void SelectionSortRecursive(int[] Array, int n) // sorted in descending order recursively
{
if (n >= Array.Length - 1)
return;
int max = n;
for (int i = n + 1; i < Array.Length; i++)
{
if (Array[i] > Array[max])
max = i;
}

swap(Array, n, max);
SelectionSortRecursive(Array, n + 1);
}

排序算法正常工作并正确排序。

最佳答案

将您的 for 循环留在...仍然是递归的,因为您已经有一个递归调用,并且在递归中添加任何数量的非递归仍然会留下递归。

在没有 for 循环的情况下实现上面的内容......这是可以做到的。 @Emaro 的回答是正确的,因为它在代码中没有明确的 for 循环,但他使用的 LINQ 仍然是对数组的隐式有限非递归迭代......即循环。

因此,如果您真的不想要循环,您可以将那个替换为递归。

private static void SelectionSortRecursive(int[] arr, int n)
{
if (n >= arr.Length - 1)
return;

int max = n;
Max(n + 1);

swap(arr, n, max);
SelectionSortRecursive(arr, n + 1);

void Max(int i)
{
if (i == arr.Length)
return;
if (arr[i] > arr[max])
max = i;
Max(i + 1);
}
}

这是一个奇怪的解决方案,不是我个人写的,但不管怎样,你去吧。

关于c# - 使用 for 循环进行选择排序的递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55951833/

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