递归:反转字符串
Posted 我家大宝最可爱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归:反转字符串相关的知识,希望对你有一定的参考价值。
字符串也可以考虑使用递归
- 假如子问题已经完成了反转
- 两侧的字符行交换
- 当
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)
以上是关于递归:反转字符串的主要内容,如果未能解决你的问题,请参考以下文章