递归:反转字符串

Posted 我家大宝最可爱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归:反转字符串相关的知识,希望对你有一定的参考价值。

字符串也可以考虑使用递归

  1. 假如子问题已经完成了反转
  2. 两侧的字符行交换
  3. l>=r停止即可

先递归再处理

s = list("abcdefgh")
def dfs(arr, l, r):
    if l >= r: # 递归的终止条件
        return
    dfs(arr,l+1,r-1) # 缩减问题的规模,重复操作
    arr[l],arr[r] = arr[r],arr[l] # 重复操作部分。交换左右的两个字符
dfs(s,0,len(s)-1)
print(s)

先处理再递归

这个递归很简单,但是我在实现的时候发现了另一种想法,就是先进行交换,然后再去处理子问题,这种方式也是对的。先后递归再处理和先处理再递归结果竟然是一样的。

打印二叉树的时候

  • 先打印再递归对应的是先序遍历
  • 先递归再打印的是中序遍历

不同顺序对应的结果也是不同的,为什么这里的结果是相同的呢?其实在这里我想错了,先交换后递归和先递归后交换虽然结果相同,但是中间操作是不同的。

  • 先交换后递归是从两侧往中间改变的
  • 先递归后交换是从中间往两侧改变的

二叉树遍历的时候不管先序还是中序也都是把所有节点遍历一遍。

s = list("abcdefgh")
def dfs(arr, l, r):
    if l >= r: # 递归的终止条件
        return
    arr[l],arr[r] = arr[r],arr[l] # 重复操作部分。交换左右的两个字符
    dfs(arr,l+1,r-1) # 缩减问题的规模,重复操作
    

dfs(s,0,len(s)-1)
print(s)

以上是关于递归:反转字符串的主要内容,如果未能解决你的问题,请参考以下文章

递归:反转字符串

递归:反转字符串

在 Java 中使用递归反转字符串

递归:在其位置反转字符串

我想反转堆栈,但我不知道如何使用递归来反转这个......如何在不使用递归的情况下反转堆栈

递归字符串反转函数