c# - 递归字符串反转函数

标签 c# string recursion

出于好奇写了一个递归的字符串反转函数,但在 XOR 方面遇到了一些问题。这个函数的重点是不使用迭代器,这就是为什么它是一个递归函数。这不是作业,只是好奇心。

    private static char[] ReverseNL(char[] arr, int index)
    {
        var len = arr.Length;
        if (index > 0)
            arr[len - index] ^= arr[index - 1];
        return index-- < 1 ? arr : ReverseNL(arr, index);
    }

它似乎干扰了我字符串的第一部分

“嘿,堆!”变成“I♫→A ←E↨reht yeh”

永远是短语的前半部分变得困惑...

更新..

我想这里真的不需要异或..所以使用了基本赋值,也去掉了返回。

    private static void ReverseNL(char[] arr, int index) {
        var len = arr.Length;
        if (index > 0 && index > len / 2) {
            var c = arr[len - index];
            arr[len - index] = arr[index - 1];
            arr[index - 1] = c;
            index--;
            ReverseNL(arr, index);
        }
    }

最佳答案

递归几乎总是用来简化问题。递归算法在本质上通常也是函数式的(尽管它们不一定是函数式的)。

在反转字符串(或 char[])的情况下,“更简单”意味着“在较小的数组上操作”。

例如,你可以减少如下:

"test"
"est"   't'
"st"    'e'
"t"     's'
""      't'

(左边是缩减后的数据,右边是切割后的数据)

在伪代码中,您可以按如下方式执行归约:

char[] reverse(char[] data) {
    if (data.Count() == 0) {
        return new char[] { };
    }

    char cut = data.First();
    char[] rest = data.Skip(1);

    char [] restReversed = reverse(rest);

    // ???
}

我会留给您来决定下一步需要用您拥有的数据做什么。

关于c# - 递归字符串反转函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3424551/

相关文章:

c - 如何在 C 中打印定义的字符串宏?

javascript - 递归操作javascript对象数据结束

c# - 我的 tcp 监听器监听哪个网络接口(interface)

c# - Summernote 和 MVC c# 中的表单提交

c# - 如何胜过这个正则表达式替换?

我们可以在 C 中将变量设置为数字范围吗?

c - 坚持构建递归函数

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

c# - 我如何记录一个 c# dll

C# Transactionscope - 在同一事务中插入/选择,多个连接