c# - 使用 for 循环进行选择排序的递归
问题描述
我有一个递归选择排序方法,在另一种方法中进行了初始递归调用。但是我在递归方法中使用了 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);
}
}
这是一个奇怪的解决方案,不是我亲自写的,但是你去。
推荐阅读
- subprocess - (Odoo) 为什么我在使用 pganonymizer 时无法连接到服务器?
- javascript - 如何在 JavaScript 中计算自上午 9:30 以来的时间?
- perforce - 有没有办法在 P4EXP 上关闭“启动时启动”?
- jquery - ajax 调用后如何获取 alert(true)?
- python - 如何允许 Django 容器在没有权限错误的情况下使用 Docker SDK?
- python - 将 json UTC 时间格式转换为 CST - 在 python 中
- django - 如何在 AJAX 中传递 Django url?
- reactjs - Parcel 构建失败`bundle.scss:undefined:undefined: plugin is not a function`
- sql - 如何修复:ORA-01427:单行子查询在 UPDATE 中返回多于一行
- python-3.x - 如果服务器没有在 python3 中以两种方式 SSL 身份验证请求客户端证书,如何停止握手和数据共享?