美文网首页
使用递归实现字符串逆序

使用递归实现字符串逆序

作者: 大智先生 | 来源:发表于2019-05-19 23:36 被阅读0次

使用递归实现字符串逆序

以下代码可以实现字符串逆序输出:

/** 对字符串s进行逆序,比如abcde逆序后为edcba */
public String reverse(String s) {
    return s.length() > 0 ? reverse(s.substring(1)) + s.charAt(0) : "";
}

比如执行方法reverse("abcde");,会返回结果edcba

怎么理解这个方法呢?

为了便于理解,我们把以上方法进行单行改造,改造后的造价方法如下:

/** 对字符串s进行逆序,比如abcde逆序后为edcba */
public static String reverse(String s) {
    boolean isNotEmpty = s.length() > 0;
    if (isNotEmpty) {
        String substring = s.substring(1);
        String reverse = reverse(substring);
        String result = reverse + s.charAt(0);
        return result;
    }
    return "";
}

然后对发造后的方法打断点进行Debug,即可弄清递归方法的执行流程。

比如执行reverse("abcde"),具体执行流程如下:

// 首先依次执行如下5个步骤,即方法递归了5次
1. substring("abcde");
2. substring("bcde");
3. substring("cde");
4. substring("de");
5. substring("e");

// 执行完以上5个步骤后,递归结束,方法开始返回,返回值依次为:
5. e
4. d
3. c
2. b
1. a

递归执行流程总结:

  1. 方法返回的顺序是与方法执行的顺序倒过来的;

  2. 即最后执行的方法,最先返回,最先执行的方法,最后返回;

  3. 递归方法执行与返回的整个过程,类似于一个入栈和出栈的过程。


使用递归实现数组逆序

思路:从两端向中间依次交换两端位置的值,直到交换完毕。比如一个长度为6的数组,则交换过程如下:

0:5 交换0和5位置的元素
1:4 交换4和4位置的元素
2:3 交换2和3位置的元素
3:2 交换完毕,退出递归

/**
 * 使用递归实现数组倒序;
 * 依次交换以下位置元素的值:
 * 第1个 与 倒数第1个
 * 第2个 与 倒数第2个
 * 第3个 与 倒数第3个
 * ...
 */
public void reverseArray(int[] array, int start, int end) {
    // 依次交换两端位置元素的值
    if (start < end) {
        int temp = array[end];
        array[end] = array[start];
        array[start] = temp;
        reverseArray(array, start + 1, end - 1);
    }
    // 顺序交换完毕,输出数组
    System.out.println(Arrays.toString(array));
}

相关文章

  • 使用递归实现字符串逆序

    使用递归实现字符串逆序 以下代码可以实现字符串逆序输出: 比如执行方法reverse("abcde");,会返回结...

  • 如何仅用递归函数和栈操作逆序一个栈

    题目 将一个栈里面的元素逆序,只能用递归函数来实现,不能用其他数据结构。 要求 只能用递归函数来实现 可以使用现成...

  • leetcode 单链表的各种算法

    1 递归实现:合并两个有序的单链表 2 递归实现:单链表逆序存入vector 3 循环实现:快慢指针找到单链表中间...

  • 今日份收获

    使用Excel中的vba功能可以实现字符串逆序输出。用好这一利器,可以让研究事半功倍。

  • 利用系统栈使一个栈逆序

    题目: 给你一个栈, 请你逆序这个栈, 不能申请额外的数据结构, 只能使用递归函数。 如何实现?非常经典的做法

  • 链表逆序的递归实现

    链表逆序是个很基础的算法,考察的是指针操作和基本数据结构。常规的写法当然是OK的,不过要是还会写出一个递归的链表逆...

  • 单链表逆序非递归实现和递归实现

    “单链表逆序”问题。要求不能使用额外的节点存储空间,如何在不使用额外存储节点的情况下使一个单链表的所有节点逆序?我...

  • 字符串翻转

    字符串操作是较为常见的,下面就介绍两种较为简单的方法实现字符串翻转.第一种: 第二种:使用for循环 使用逆序遍历...

  • C语言-递归实现整数n逆序输出

    问题描述:递归实现整数n逆序输出 源代码: 运行结果: 程序参数: 输出大小: 149.3837890625 Ki...

  • 如何写出高性能的代码

    使用StringBuilder来连接字符串 避免递归(无法避免时,使用尾递归代替头递归) 谨慎使用正则表达式 循环...

网友评论

      本文标题:使用递归实现字符串逆序

      本文链接:https://www.haomeiwen.com/subject/dzzxzqtx.html