概述
原字符串abcde,打印为edcba,利用递归调用实现。
递归定义
初步理解:方法内部调用方法自身
实现思路
先打印最后一个字符,再打印前一个字符,递归调用本过程即可。
package com.lovehena.recursion;
import lombok.extern.slf4j.Slf4j;
/*
* 递归打印字符串逆序,如abcde 打印为 edcba
* */
@Slf4j
public class ReversePrintStr {
public static void main(String[] args) {
String str = "Hello world";
reversePrintV2(str, str.length() - 1);
}
/*
* 递归调用逆序打印字符串 从字符串的最后一个字符开始打印 V1
* */
private static void reversePrintV1(String s, int index) {
if (index == 0) { // index减小到为0时就应该结束递归,并且由于打印字符的语句是在递归调用内的 所以需手动调用一次 System.out.print(s.charAt(index));
System.out.print(s.charAt(index));
return;
}
System.out.print(s.charAt(index));
reversePrintV1(s, index - 1);
}
/*
* 递归调用逆序打印字符串 从字符串的最后一个字符开始打印 V2
* */
private static void reversePrintV2(String s, int index) {
if (index == -1) { // index减小到为-1时表示 上一次递归调用时已经输出了索引为0的字符 此时直接结束递归即可
return;
}
System.out.print(s.charAt(index));
reversePrintV2(s, index - 1);
}
// todo 扩展:递归调用逆序打印字符串 从字符串的第一个字符开始打印
}
测试结果
扩展
递归调用逆序打印字符串 从字符串的第一个字符开始打印